{"id":18812457,"url":"https://github.com/zweigraf/march-thirteen","last_synced_at":"2026-03-03T13:37:40.464Z","repository":{"id":98364386,"uuid":"84880619","full_name":"zweigraf/march-thirteen","owner":"zweigraf","description":"💻 Local Chat Application with MultiPeerConnectivity.","archived":false,"fork":false,"pushed_at":"2017-04-02T13:45:45.000Z","size":127,"stargazers_count":11,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T11:43:28.325Z","etag":null,"topics":["jsqmessagesviewcontroller","multipeer-connectivity","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zweigraf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2017-03-13T22:28:24.000Z","updated_at":"2023-12-19T02:52:59.000Z","dependencies_parsed_at":"2023-07-10T14:47:18.542Z","dependency_job_id":null,"html_url":"https://github.com/zweigraf/march-thirteen","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zweigraf%2Fmarch-thirteen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zweigraf%2Fmarch-thirteen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zweigraf%2Fmarch-thirteen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zweigraf%2Fmarch-thirteen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zweigraf","download_url":"https://codeload.github.com/zweigraf/march-thirteen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248783314,"owners_count":21160900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["jsqmessagesviewcontroller","multipeer-connectivity","swift"],"created_at":"2024-11-07T23:33:12.023Z","updated_at":"2026-03-03T13:37:35.446Z","avatar_url":"https://github.com/zweigraf.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# march-thirteen\nLocal Chat Application with MultiPeerConnectivity.\n\n## How it works\n\nThe app opens a service via MultiPeerConnectivity and at the same time advertises\nitself as a peer and browses for other peers. If any peers are found, invitations\nare sent out automatically. Received invitations are accepted automatically.\n\nMessages can then be send to all connected peers, sort of like a group chat.\n\nNo additional networking logic on top of MultiPeerConnectivity is implemented (yet).\n\n## Screenshot\n\n![screenshot](screenshot.png)\n\n## WalkieTalkie\n\nAll of the networking logic is contained in the WalkieTalkie folder which might\nlater be refactored into a separate library.\n\nThe main component is the `Communicator` class. This is a generic class\nencapsulating networking. You use this to send and receive messages. \n\nMessages are serialized \u0026 deserialized using a combination of generic protocols.\n\n`Communicator` is specialized on the `CommunicatorOutput` protocol. This can be\nanything you like it to, e.g. in this application it represents a `ChatEvent`.\nThe `CommunicatorOutput` protocol also defines a payload type, which is the actual\nobject that will be sent over the wire.\n\nSerialization is done via the `CommunicatorPayload` protocol. A payload has to \nknow how to represent itself as a dictionary and how to construct itself from \nsuch a dictionary.\n\nThis dictionary is then sent over the wire and arrives on the other side. There\nthe `Communicator` creates a `CommunicatorMessage` object, which includes the\ndeserialized payload and some meta information (like the associated peer).\n\nThis message object is used to instantiate an `CommunicatorOutput` instance\nwhich takes the message and transforms it into an application level object.\n\nThis all plays together to create a seamless serialisation \u0026 deserialisation logic\nwithout any action needed on the calling side.\n\n### Example Usage\n\nFor a concrete usage example please see the `ChatRoom.swift` file. There all the \napplication level objects for the chat are defined implementing the needed \nprotocols.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzweigraf%2Fmarch-thirteen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzweigraf%2Fmarch-thirteen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzweigraf%2Fmarch-thirteen/lists"}