{"id":26494745,"url":"https://github.com/davi0805/ft_irc","last_synced_at":"2025-07-10T09:33:56.891Z","repository":{"id":281399516,"uuid":"945155271","full_name":"Davi0805/ft_irc","owner":"Davi0805","description":"simple in-memory irc server for educational/learning purposes, to better understanding of TCP, Sockets and protocols","archived":false,"fork":false,"pushed_at":"2025-03-16T21:14:39.000Z","size":94,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-16T21:24:37.377Z","etag":null,"topics":["irc","irc-server","layered-architecture","services-pattern","socket","sockets","tcp"],"latest_commit_sha":null,"homepage":"","language":"C++","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/Davi0805.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":"2025-03-08T19:32:19.000Z","updated_at":"2025-03-16T20:03:19.000Z","dependencies_parsed_at":"2025-03-08T20:41:41.854Z","dependency_job_id":null,"html_url":"https://github.com/Davi0805/ft_irc","commit_stats":null,"previous_names":["davi0805/ft_irc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Davi0805%2Fft_irc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Davi0805%2Fft_irc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Davi0805%2Fft_irc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Davi0805%2Fft_irc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Davi0805","download_url":"https://codeload.github.com/Davi0805/ft_irc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244592995,"owners_count":20478002,"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":["irc","irc-server","layered-architecture","services-pattern","socket","sockets","tcp"],"created_at":"2025-03-20T10:24:32.330Z","updated_at":"2025-03-20T10:24:32.990Z","avatar_url":"https://github.com/Davi0805.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ft_irc - In-Memory IRC Server\n\n## Overview\n\n**ft_irc** is a minimalist IRC server developed in **C++98**, implementing a server compatible with IRC clients for real-time communication. The project's goal is to support multiple clients simultaneously using non-blocking operations while adhering to IRC protocol requirements.\n\n## Architecture and Patterns\n\nThe project follows a **layered architecture**, separating responsibilities to improve organization and maintainability:\n\n- **Commands** – Implementation of IRC-supported commands.\n- **Core** – Central server logic, including initialization and the main loop.\n- **Handlers** – Processing of events and messages received from clients.\n- **Models** – Data structures for users and channels.\n- **Services** – Specific server functionalities following the **Service Pattern**.\n- **Utils** – Utility functions that support server operations.\n\n### Design Patterns Used\n\n- **Command Pattern** – Commands are implemented as classes derived from an abstract class, enabling extensibility and code organization.\n- **Non-Blocking I/O** – Uses `poll()` to manage multiple connections without blocking.\n- **Service Pattern** – Organizes functionalities into service modules for better modularity.\n- **Observer Pattern** – Manages message forwarding between clients and channels.\n- **Singleton Pattern** – Ensures a single instance of the server is running.\n\n## Running the Server\n\n```bash\n./ircserv \u003cport\u003e \u003cpassword\u003e\n```\n\n- **port:** TCP port for IRC connections.\n- **password:** Password required for client authentication.\n\n## Technologies and Restrictions\n\n- **Language:** C++98\n- **Allowed libraries:** Only POSIX system calls.\n- **Connection management:** `poll()` to prevent blocking.\n- **Use of Boost and external libraries is prohibited.**\n\n## Next Steps\n\n- Implement support for bots and file transfers.\n- Improve logging and server monitoring.\n- Add automated tests.\n\n## References\n\n- [RFC 1459 - Internet Relay Chat Protocol](https://datatracker.ietf.org/doc/html/rfc1459)\n- [ft_irc Project on GitHub](https://github.com/Davi0805/ft_irc)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavi0805%2Fft_irc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavi0805%2Fft_irc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavi0805%2Fft_irc/lists"}