{"id":15411992,"url":"https://github.com/zleao/rttictactoe","last_synced_at":"2026-01-20T03:30:54.586Z","repository":{"id":47357127,"uuid":"103845663","full_name":"zleao/RTTicTacToe","owner":"zleao","description":"Online and RealTime TicTacToe sample, that uses CQRS/ES, SignalR, Xamarin Forms, .Net5 and MAUI","archived":false,"fork":false,"pushed_at":"2022-12-08T15:43:45.000Z","size":1484,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-12T22:35:47.395Z","etag":null,"topics":["cqrs-es","cqrs-pattern","efcore","maui","net5","signalr","sqlite","xamarin-forms"],"latest_commit_sha":null,"homepage":"","language":"C#","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/zleao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-17T16:54:25.000Z","updated_at":"2021-09-02T07:39:10.000Z","dependencies_parsed_at":"2023-01-25T14:46:04.185Z","dependency_job_id":null,"html_url":"https://github.com/zleao/RTTicTacToe","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zleao%2FRTTicTacToe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zleao%2FRTTicTacToe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zleao%2FRTTicTacToe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zleao%2FRTTicTacToe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zleao","download_url":"https://codeload.github.com/zleao/RTTicTacToe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247514970,"owners_count":20951390,"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":["cqrs-es","cqrs-pattern","efcore","maui","net5","signalr","sqlite","xamarin-forms"],"created_at":"2024-10-01T16:50:47.390Z","updated_at":"2026-01-20T03:30:54.551Z","avatar_url":"https://github.com/zleao.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RTTicTacToe\nFullstack implementation of an online/realtime TicTacToe game. The purpose is to test some tools and frameworks. The solution provides a WebApi (currently hosted on [Azure](https://rttictactoe.azurewebsites.net/swagger)) and a frontend with a basic implementation of the TicTacToe game.\n\n### **Always refer to the readme file of the [master](https://github.com/zleao/RTTicTacToe/tree/master) branch, to get the most up-to-date info.**\n\n## Backend\nSimple Asp.NetCore API with a CQRS/ES pattern. For real time communication, it uses SignalR. The data is persisted in a SQLite database with the use of EFCore (both for EventSourcing and read datamodel).\n\n**Key technologies:**\n- .Net 5\n- CQRSLite v1.33.0\n- Swashbuckle.AspNetCore v6.1.4\n- Microsoft.AspNetCore.SignalR.Core (1.1.0)\n- EFCore v5.0.8\n- EFCore.Sqlite v5.0.8\n\n## Frontend\nCross platform client.\n- Xamarin Forms 5 with support for **iOS**, **Android** and **UWP**\n\n\n## Run the code\nProject developed with VS2019. Supported by VS2019+\nThere are 2 solutions, one for backend and the other for frontend.\nYou can run the api locally or use the one I'm currently hosting in Azure ([https://rttictactoe.azurewebsites.net/swagger](https://rttictactoe.azurewebsites.net/swagger)).\n\n**Note:** At any given time this endpoint might be deleted without prior notice.\n\n### Backend\nThe main api project is the `RTTicTacToe.WebApi`. You can run the api locally (it should work without any special configuration) or publish it to a hosting service.\n\n### Frontend\nSince the frontend is implemented with Xamarin Forms, you can choose one of the implemented platforms and run in a simulator or real device. The code should compile and run as-is. The only required change, is the base url for the api endpoint. To configure it, just go `RTTicTacToe.Forms/App.cs` and set the static string `AzureBackendUrl`. By default it's pointing to the Azure hosted web app.\n\n## Future tryouts\n### Backend\n- Try [EventFlow](https://eventflow.readthedocs.io/) for the CQRS/ES handling\n- Use a specialized framework to store the data from EventSourcing, (e.g. [NEventStore](https://github.com/NEventStore/NEventStore))\n- Add logic to revert movements using CQRS features\n### Frontend\n- MAUI implementation","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzleao%2Frttictactoe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzleao%2Frttictactoe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzleao%2Frttictactoe/lists"}