{"id":20957069,"url":"https://github.com/akhaled01/irc","last_synced_at":"2026-04-27T00:31:07.293Z","repository":{"id":217667910,"uuid":"744507737","full_name":"akhaled01/IRC","owner":"akhaled01","description":"CLI chat application","archived":false,"fork":false,"pushed_at":"2024-01-18T07:07:45.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-02T06:13:22.751Z","etag":null,"topics":["go","ip","shell","tcp"],"latest_commit_sha":null,"homepage":"","language":"Go","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/akhaled01.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":"2024-01-17T12:51:27.000Z","updated_at":"2024-05-16T20:42:06.000Z","dependencies_parsed_at":"2024-01-17T21:04:50.987Z","dependency_job_id":"7b959ccb-7405-4482-8403-ce00894b978b","html_url":"https://github.com/akhaled01/IRC","commit_stats":null,"previous_names":["akhaled01/irc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/akhaled01/IRC","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhaled01%2FIRC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhaled01%2FIRC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhaled01%2FIRC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhaled01%2FIRC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akhaled01","download_url":"https://codeload.github.com/akhaled01/IRC/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhaled01%2FIRC/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["go","ip","shell","tcp"],"created_at":"2024-11-19T01:29:27.371Z","updated_at":"2026-04-27T00:31:07.272Z","avatar_url":"https://github.com/akhaled01.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IRC (net-cat)\n\n\u003ch2\u003eAbout The Project\u003c/h2\u003e\nIRC is a shell-based chat app built with pure Golang that aims replicates net-cat's server-client Architecture. It lets you act as a server, listening on a specific port for incoming connections, and can handle connections from multiple clients. It's a straightforward solution for seamless communication across a network. Happy chatting!\n\n## Project Objectives\n\nIRC replicates the data exchange capabilities of the original NetCat command by introducing a group chat system with the following features:\n\n- **TCP Communication**: Establish TCP connections between the server and multiple clients, enabling one-to-many communication.\n\n- **Client Names**: Clients are required to provide a name, adding a personal touch to the chat.\n\n- **Control Connections**: The server can control the quantity of connected clients, ensuring efficient management.\n\n- **Message Exchange**: Clients can send messages to the chat, enhancing collaborative communication.\n\n- **Message Timestamps**: Messages are timestamped with the sending time and the user's name for clear identification (e.g., `[2020-01-20 15:48:41][client.name]:[client.message]`).\n\n- **Chat History**: When a new client joins the chat, they receive all previous messages sent to the chat, ensuring continuity.\n\n- **Client Notifications**: When a client connects or disconnects, the server notifies the remaining clients about the event.\n\n- **Broadcasting**: All clients receive messages sent by other clients, fostering interaction.\n\n- **Graceful Exit**: If a client leaves the chat, the rest of the clients remain connected without disruption.\n\n- **Port Specification**: If no port is specified, the default port is set to 8989. Otherwise, the program provides a usage message for guidance.\n\n- **Username Deadline**: A client has 30 seconds to enter a username when joining, otherwise the server disconnects\n\n## Implemented Chat Commands\n\n1. `/h` : help to show implemented command\n2. `/nu`: change username \n3. `/l` : leave the chat\n\n## Getting Started\n\nFollow these steps to set up and run the NET-MAJLES project:\n\n### Clone the Project\n\n```git clone https://github.com/amali01/net-cat```\n\n### Navigate to the Project Directory\n\n```cd net-cat```\n\n## Usage\n\nYou can run the IRC program in various ways:\n\n1. **Building Server**: Run the program without specifying a port to start it in server mode. By default, it will listen on port 8989.\n\n```go run main.go```\n\n2. **Building Server Mode with Custom Port**: To specify a custom port in server mode, provide the desired port number as an argument.\n\n```go run main.go $port```\n\n3. **Building the Program**:\n\n- You can build the program using the provided `build.sh` script.\n- This will create an executable named `TCPChat`, which can be executed with the port number as argument.\n- or without were by default, it will listen on port 8989.\n\n```build.sh```\\\n```./TCPChat $port```\n\n## Project Structure\n\n- Written in Go\n- Utilizes TCP communication\n- Incorporates Go-routines for concurrency\n- Uses channels and Mutexes for synchronization\n- Supports a maximum of 10 concurrent connections\n- Adheres to best coding practices\n- Includes a test file for unit testing\n- Handles errors effectively on both server and client sides\n\n## Used Packages\n\n- io\n- log\n- os\n- fmt\n- net\n- sync\n- time\n- bufio\n- strings\n- testing\n\n## Authors\n\n- emahfoodh (Eman Mahfoodh)\n- amali01 (Amjad Ali)\n- akhaled01 (Abdulrahman Idrees)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhaled01%2Firc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakhaled01%2Firc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhaled01%2Firc/lists"}