{"id":19055910,"url":"https://github.com/brandonegg/chapp","last_synced_at":"2026-06-22T13:31:48.014Z","repository":{"id":207221200,"uuid":"718713575","full_name":"brandonegg/chapp","owner":"brandonegg","description":"Chat application built on top of a custom application protcol with TCP","archived":false,"fork":false,"pushed_at":"2023-11-26T23:53:54.000Z","size":412,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-13T12:07:37.286Z","etag":null,"topics":["python","socket-programming","tcp","tkinter"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brandonegg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-14T16:44:33.000Z","updated_at":"2023-11-30T19:15:19.000Z","dependencies_parsed_at":"2025-01-02T11:25:44.441Z","dependency_job_id":"272fabd7-3181-4f42-a4eb-26e103decfd5","html_url":"https://github.com/brandonegg/chapp","commit_stats":null,"previous_names":["brandonegg/chapp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brandonegg/chapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonegg%2Fchapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonegg%2Fchapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonegg%2Fchapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonegg%2Fchapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brandonegg","download_url":"https://codeload.github.com/brandonegg/chapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandonegg%2Fchapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34651747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","socket-programming","tcp","tkinter"],"created_at":"2024-11-08T23:47:25.284Z","updated_at":"2026-06-22T13:31:47.997Z","avatar_url":"https://github.com/brandonegg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chatting Application Protocol\r\n\r\n## Getting Started:\r\n\r\n### Running the Application\r\n\u003e Note: python may be referred to python3 on your system. The two are typically interchangable and dependent on your system path configuration. If python does not work, you may try python3\r\n\r\n#### Start the server:\r\n\r\n**_windows_:**\r\n```sh\r\npython .\\chat_app\\server.py\r\n```\r\n**_linux/macos_:**\r\n```sh\r\nsh ./bin/start.sh server\r\n```\r\n\r\n#### Start a client:\r\n\r\n**_windows_:**\r\n```sh\r\npython .\\chat_app\\login.py\r\n```\r\n**_linux/macos_:**\r\n```sh\r\nsh ./bin/start.sh client\r\n```\r\n\r\n### Basic Application Guide\r\nTo send messages, on one login.py being run put in a name and submit, then either click on a previous dm's button or put in who you would like to dm and click the submit button. Then you can input a chat message and hit send and it will be seen on your GUI and the recipient's GUI if they are online. At any point, you can close the GUI, or hit the logout button and you will be able to log in again as that user. The same user can not be logged in at the same time as handled by the server.\r\n\r\n\r\n### Running Tests\r\nWe have included several test cases for validating the protocol message parser (ChatAppRequest class). The tests are run with pytest using the shollowing command.\r\n\r\n```sh\r\nsh ./bin/test\r\n```\r\n\r\n## Protocol Overview:\r\n\r\nThe protocol has the following format:\r\n\r\n**Request:**\r\n```\r\n\u003cACTION\u003e\\t\u003cFROM\u003e-\u003e\u003cTO\u003e\\\r\n{field key}: {field value}\r\n...\r\n```\r\n\r\nThe first line of the request is called the *Action Line*, it is intended to specify the entire purpose of the data being sent and where it should go.\r\n- ACTION = INTRODUCE|POST|RESPOND|DISCONNECT\r\n- FROM = username of sending node\r\n- TO = username of receiving node\r\n\r\n\r\nLines below this first line are called \"fields\" and are conditionally added based on action type.\r\n```\r\n\u003cfield\u003e:\u003cvalue\u003e\r\n```\r\n\r\n#### General Field Rules:\r\n\r\n- All requests require an id field.\r\n- For actions POST the following fields are required:\r\n  - message: The message being sent in the regular expression format: \".*+\"\r\n- For actions RESPOND the following fields are required:\r\n  - status: A number representing the status of the previous request.\r\n- Actions INTRODUCE and DISCONNECT have no required fields other than id.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonegg%2Fchapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrandonegg%2Fchapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandonegg%2Fchapp/lists"}