{ "info": { "author": "Silas Bischoff", "author_email": "silas.bischoff@googlemail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Games/Entertainment", "Topic :: Internet", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Networking" ], "description": "[![Build Status](https://dev.azure.com/pxlbrain/pygase/_apis/build/status/sbischoff-ai.pygase?branchName=master)](https://dev.azure.com/pxlbrain/pygase/_build/latest?definitionId=2&branchName=master)\n![Azure DevOps tests (branch)](https://img.shields.io/azure-devops/tests/pxlbrain/pygase/2/master.svg)\n![Azure DevOps coverage (branch)](https://img.shields.io/azure-devops/coverage/pxlbrain/pygase/2/master.svg)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n![PyPI](https://img.shields.io/pypi/v/pygase.svg)\n# PyGaSe\n**Py**thon **Ga**me **Se**rver\n\nA package for Python 3.6+ that contains a game-ready client-server architecture and UDP-based network protocol.\n\nIt deals with problems such as package loss or network congestion so you don't have to. Instead it gives you\na high-level API to easily connect clients and backends that share a synchronized game state and exchange events.\nThe async framework for this one is [curio](https://github.com/dabeaz/curio), which I highly recommend.\n\nPyGaSe is built to be easy to use, lightweight, fast, scalable and reliable.\nYou can build a fast-paced real-time online game with this.\nYou can also build a large-scale MMO with thousands of clients if you like.\n\nI'm actively developing PyGaSe in the context of several Indie game projects and I'm happy to share it.\n\n---\n***BREAKING CHANGE**: Version 0.2.0 is basically a new API and updating from 0.1.9 or lower will break you code.*\n*It is also much more stable, flexible and powerful, so make sure to use 0.2.0 or higher.*\n\n---\n\n### Installation\n```\npip install pygase\n```\nor better yet `poetry add pygase`. Seriously, use [poetry](https://github.com/sdispater/poetry), it's a revelation.\n\n## Usage\n\n### API Reference & Tutorials\n\nFor API documentation and a *Getting Started* section go [here](https://sbischoff-ai.github.io/pygase/).\n\n### Example\n\n[This example game](https://github.com/sbischoff-ai/pygase/tree/master/chase) implements an online game of tag,\nin which players can move around, while one of them is the chaser who has to catch another player.\nA player who has been catched becomes the next chaser and can catch other players after a 5s protection countdown.\n\nRun `server.py` first, then run `client.py` in additional terminal sessions to add players.\nOnly use the same player name once.\n\n### Debugging & Logging\n\nYou can use the standard `logging` module. On level `INFO` you will get logging output for events such as\nstartups, shutdowns, new connections or disconnects. On `DEBUG` level you get detailed output right down to the level\nof sending, receiving and handling single network packages.\n\nDebug logs are also a good way to understand the inner workings of PyGaSe.\n\n---\n## Changes\n\n### 0.3.1\n- improved documentation\n- minor logging fixes\n\n### 0.3.0\n- sticking to SemVer from here on out\n- logging added using the standard `logging` module\n- improve event handler arguments\n- `Backend` class added to reduce server-side boilerplate\n- various bugfixes\n\n### 0.2.0\n- complete overhaul of pygase 0.1.x with breaking API changes\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://sbischoff-ai.github.io/pygase/", "keywords": "client,server,real-time,network,games", "license": "MIT", "maintainer": "Silas Bischoff", "maintainer_email": "silas.bischoff@googlemail.com", "name": "pygase", "package_url": "https://pypi.org/project/pygase/", "platform": "", "project_url": "https://pypi.org/project/pygase/", "project_urls": { "Homepage": "https://sbischoff-ai.github.io/pygase/", "Repository": "https://github.com/sbischoff-ai/pygase" }, "release_url": "https://pypi.org/project/pygase/0.3.1/", "requires_dist": [ "curio (>=0.9.0,<0.10.0)", "ifaddr (>=0.1.6,<0.2.0)", "u-msgpack-python (>=2.5,<3.0)" ], "requires_python": ">=3.6,<4.0", "summary": "game-ready client-server architecture and UDP-based network protocol - built to be easy to use, lightweight, fast, scalable and reliable", "version": "0.3.1" }, "last_serial": 5638511, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "8e13a8510d2378dc678c7e42f61349c6", "sha256": "a10772f1056590b851e4158830d1b545057d32cf8e91168c2716692258cdd43e" }, "downloads": -1, "filename": "pygase-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8e13a8510d2378dc678c7e42f61349c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11349, "upload_time": "2018-06-01T14:05:09", "url": "https://files.pythonhosted.org/packages/1d/24/49de157cc2820b1f28d4ac98f6bf9df2bb1b0692f32fc8781e6eb86a2520/pygase-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "922337a27f43c0daded5989c7875be11", "sha256": "d346589b05b0c52a17b21cb90e6eab586946e188c9261f0dfa2344a38b6e26dc" }, "downloads": -1, "filename": "pygase-0.1.2.tar.gz", "has_sig": false, "md5_digest": "922337a27f43c0daded5989c7875be11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11287, "upload_time": "2018-06-01T14:19:50", "url": "https://files.pythonhosted.org/packages/00/07/6ecda93d0ea83deb7f9c651dbb84a87f68a5588238691841d4688dd596ec/pygase-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "6f5744a34eef77cf1b7e52147d7e5410", "sha256": "1f4db581bda4c544d1341ca3952737303e5ef7bad8230eb5505078a5aa3c10f7" }, "downloads": -1, "filename": "pygase-0.1.3.tar.gz", "has_sig": false, "md5_digest": "6f5744a34eef77cf1b7e52147d7e5410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11651, "upload_time": "2018-06-02T21:57:20", "url": "https://files.pythonhosted.org/packages/ae/e0/06bd2883ceaab9dc5007ed313d46ce3de93f7652f65c99cccc8481fd64a2/pygase-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "31bba71f3a0e7b779fd8eabca5fc33fb", "sha256": "a8772ab20a99ab893e30ae90694c3fe6a575ec3b5b3b662cde551cb2d0b0250c" }, "downloads": -1, "filename": "pygase-0.1.4.tar.gz", "has_sig": false, "md5_digest": "31bba71f3a0e7b779fd8eabca5fc33fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11922, "upload_time": "2018-06-02T22:06:00", "url": "https://files.pythonhosted.org/packages/8a/ae/d9baa5ffcef49deb32af45764869e32e1af92e5a06e2215f22fbcc5b37f7/pygase-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "49f8131e6279bf1247c50d95b83c29b2", "sha256": "b0e43d37771cb613a9ed53bdd6905c4f90de5a42eddaaf6701fe752e1a3750f5" }, "downloads": -1, "filename": "pygase-0.1.5.tar.gz", "has_sig": false, "md5_digest": "49f8131e6279bf1247c50d95b83c29b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11957, "upload_time": "2018-06-02T22:24:19", "url": "https://files.pythonhosted.org/packages/f6/6b/d1c4cd7a9a826bb5be7f9d8e8e65afb9903323c7d518f6b4447d10ae63dd/pygase-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "4292fb3793ffeb148f313f283d1e20f0", "sha256": "58d6e76372b7543510fb7c80af71f9e54aa99b3bf374be9d2d4925bbe0d49508" }, "downloads": -1, "filename": "pygase-0.1.6.tar.gz", "has_sig": false, "md5_digest": "4292fb3793ffeb148f313f283d1e20f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12017, "upload_time": "2018-06-02T23:36:45", "url": "https://files.pythonhosted.org/packages/ec/17/4ba21da2da111491eedeb0bb73270f5f5974ac2f8b78b750a8c106c15790/pygase-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8c3019a7fff7f056143378f5a50e6843", "sha256": "baa203bc9a68e5eb4904b7717d6aa9e7877093198b20b49f1631ff400090bd28" }, "downloads": -1, "filename": "pygase-0.1.7.tar.gz", "has_sig": false, "md5_digest": "8c3019a7fff7f056143378f5a50e6843", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12037, "upload_time": "2018-06-03T02:15:40", "url": "https://files.pythonhosted.org/packages/84/b3/aa239a7083c8cfea8e64ec3f01f91f8f8bf80220545b6ba759bf75c2cc1b/pygase-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "6a95c0a504262d8e5621ae6797125422", "sha256": "ccd59dfc58b500cd647c61a0866b8c6c4b4c828a06f4e1986d431f7bd6dc58ea" }, "downloads": -1, "filename": "pygase-0.1.8.tar.gz", "has_sig": false, "md5_digest": "6a95c0a504262d8e5621ae6797125422", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15058, "upload_time": "2018-06-12T16:55:35", "url": "https://files.pythonhosted.org/packages/81/bf/f19e11878fd20d0d658da04062530b01320d8eb801ed11f42ab4a8ae934a/pygase-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "ed5f3a632488b39ce6918e0666a68ad0", "sha256": "f5af8ad71de69eaab5bc5716c0753c38d07205a11a1133aba5ac20f9c92a4c4d" }, "downloads": -1, "filename": "pygase-0.1.9.tar.gz", "has_sig": false, "md5_digest": "ed5f3a632488b39ce6918e0666a68ad0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15120, "upload_time": "2018-06-20T19:53:30", "url": "https://files.pythonhosted.org/packages/72/a9/e958bdf37e2a6fc33b2c03442da0018f6ee99e03d07899ffd37ed46ea290/pygase-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "de9cb353f27bbb33b9c866d38c451924", "sha256": "f20626009b3fef93827e22be7740c6b587178adf96e776a8262c9a23c36a93ec" }, "downloads": -1, "filename": "pygase-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "de9cb353f27bbb33b9c866d38c451924", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 21578, "upload_time": "2019-04-26T16:49:31", "url": "https://files.pythonhosted.org/packages/56/70/f9711578227737085defd4b7adb0a36ca3cf4d143c79dbe90236095bb7be/pygase-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4953ab770a8c45e60334deefcff2238", "sha256": "9de6f6ac786ca6c0f2407ee27230b32990ddf7aa7a5a42242c4a364ec6d0ffc4" }, "downloads": -1, "filename": "pygase-0.2.0.tar.gz", "has_sig": false, "md5_digest": "b4953ab770a8c45e60334deefcff2238", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 18398, "upload_time": "2019-04-26T16:49:34", "url": "https://files.pythonhosted.org/packages/e0/5a/35c0c2ab1b0658271a1ba66e843b98f796c7f0b5d97ea73ffb391531cb39/pygase-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "642782f52197452cac6b1d8998df26a4", "sha256": "3241707a035596bc406a6a794fd826ec575b3d87de8a8e5acd6e39d6fcc257e1" }, "downloads": -1, "filename": "pygase-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "642782f52197452cac6b1d8998df26a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 25958, "upload_time": "2019-05-07T12:41:02", "url": "https://files.pythonhosted.org/packages/a0/03/ae2354328536f431b00f330f66383967c67c3c452578cb0a7b39b5ef5919/pygase-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9bb6e639c5ab66157686d1e01f2fbe8", "sha256": "87534cdec73e5552a25d0ec3799dc7b70b8a4dc628369a609a641bdef8756e30" }, "downloads": -1, "filename": "pygase-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c9bb6e639c5ab66157686d1e01f2fbe8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 22896, "upload_time": "2019-05-07T12:41:04", "url": "https://files.pythonhosted.org/packages/19/94/e03639c9e338f7b43c5141cd7dc211853fc44fb908f32eb10c83d1281990/pygase-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "f48ab802f6b6968935c6fcf39e297fe0", "sha256": "b1c8a129c1aade08fa9e14b69b747c56273e1212ff47b49a85c49dd500fc6151" }, "downloads": -1, "filename": "pygase-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f48ab802f6b6968935c6fcf39e297fe0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 26054, "upload_time": "2019-08-06T08:57:52", "url": "https://files.pythonhosted.org/packages/9e/ec/4bbd4af36b29d17c1a7000d4f3ec54d7dc8d6f949f08dfc1ac00fa7e844d/pygase-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce322dd1550e6a1a2a3a4d2ff25ad2b7", "sha256": "3423c66181c2984168bfe208111f442fc897e238b542d1854ed43eefe8d135c6" }, "downloads": -1, "filename": "pygase-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ce322dd1550e6a1a2a3a4d2ff25ad2b7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23039, "upload_time": "2019-08-06T08:57:54", "url": "https://files.pythonhosted.org/packages/fd/8e/15010e003b4c614f30cc6d5561d455801a26640218beceb6125b11fcaf61/pygase-0.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f48ab802f6b6968935c6fcf39e297fe0", "sha256": "b1c8a129c1aade08fa9e14b69b747c56273e1212ff47b49a85c49dd500fc6151" }, "downloads": -1, "filename": "pygase-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f48ab802f6b6968935c6fcf39e297fe0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 26054, "upload_time": "2019-08-06T08:57:52", "url": "https://files.pythonhosted.org/packages/9e/ec/4bbd4af36b29d17c1a7000d4f3ec54d7dc8d6f949f08dfc1ac00fa7e844d/pygase-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce322dd1550e6a1a2a3a4d2ff25ad2b7", "sha256": "3423c66181c2984168bfe208111f442fc897e238b542d1854ed43eefe8d135c6" }, "downloads": -1, "filename": "pygase-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ce322dd1550e6a1a2a3a4d2ff25ad2b7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 23039, "upload_time": "2019-08-06T08:57:54", "url": "https://files.pythonhosted.org/packages/fd/8e/15010e003b4c614f30cc6d5561d455801a26640218beceb6125b11fcaf61/pygase-0.3.1.tar.gz" } ] }