{"id":28399907,"url":"https://github.com/fish-tennis/gnet_csharp","last_synced_at":"2025-10-25T03:10:43.060Z","repository":{"id":228770352,"uuid":"774214176","full_name":"fish-tennis/gnet_csharp","owner":"fish-tennis","description":"c# connector library for gnet","archived":false,"fork":false,"pushed_at":"2024-12-09T10:42:30.000Z","size":44,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-01T15:52:05.153Z","etag":null,"topics":["gnet","network","websocket"],"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/fish-tennis.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":"2024-03-19T06:31:18.000Z","updated_at":"2024-12-09T10:42:34.000Z","dependencies_parsed_at":"2024-03-26T11:31:07.120Z","dependency_job_id":null,"html_url":"https://github.com/fish-tennis/gnet_csharp","commit_stats":null,"previous_names":["fish-tennis/gnet_csharp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fish-tennis/gnet_csharp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fish-tennis%2Fgnet_csharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fish-tennis%2Fgnet_csharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fish-tennis%2Fgnet_csharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fish-tennis%2Fgnet_csharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fish-tennis","download_url":"https://codeload.github.com/fish-tennis/gnet_csharp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fish-tennis%2Fgnet_csharp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262363851,"owners_count":23299477,"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":["gnet","network","websocket"],"created_at":"2025-06-01T08:11:39.935Z","updated_at":"2025-10-25T03:10:42.965Z","avatar_url":"https://github.com/fish-tennis.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gnet_csharp\nc# connector library for [gnet](https://github.com/fish-tennis/gnet)\n\nsupport TcpSocket and WebSocket\n\n# c# project example\n```c#\npublic class TestClient\n    {\n        public TcpConnection m_Connection;\n\n        public TestClient()\n        {\n            var connectionConfig = new ConnectionConfig\n            {\n                RecvBufferSize = 1024 * 100,\n                RecvTimeout = 1000,\n                WriteTimeout = 1000\n            };\n            var codec = new ProtoCodec();\n            connectionConfig.Codec = codec;\n            m_Connection = new TcpConnection(connectionConfig, 1)\n            {\n                Tag = this,\n                OnConnected = onConnected,\n                OnClose = onClose,\n            };\n\n            codec.Register(Convert.ToUInt16(pb.CmdTest.CmdHeartBeat), pb.HeartBeatRes.Descriptor);\n            codec.Register(Convert.ToUInt16(pb.CmdTest.Message), pb.TestMessage.Descriptor);\n        }\n\n        public void Start()\n        {\n            m_Connection.Connect(\"127.0.0.1:10002\");\n        }\n\n        public void Stop()\n        {\n            m_Connection.Close();\n        }\n\n        private void onConnected(IConnection connection, bool success)\n        {\n            Console.WriteLine(\"onConnected host:\"+ m_Connection.GetHostAddress() + \" success:\"+success);\n        }\n\n        private void onClose(IConnection connection)\n        {\n            Console.WriteLine(\"onClose\");\n        }\n        \n        public void ProcessPackets()\n        {\n            while (true)\n            {\n                var packet = m_Connection.PopPacket();\n                if (packet == null)\n                {\n                    return;\n                }\n                // write your logic code here\n                Console.WriteLine(\"recv cmd:\"+packet.Command() + \" msg:\"+packet.Message());\n            }\n        }\n    }\n```\n\n# unity example\n```c#\npublic class test : MonoBehaviour\n{\n    private TcpConnection m_Connection;\n    private float m_HeartBeatCounter;\n    \n    void Start()\n    {\n        var connectionConfig = new ConnectionConfig\n        {\n            RecvBufferSize = 1024 * 100,\n            RecvTimeout = 1000,\n            WriteTimeout = 1000,\n            HeartBeatInterval = 5\n        };\n        var codec = new ProtoCodec();\n        connectionConfig.Codec = codec;\n        m_Connection = new TcpConnection(connectionConfig, 1)\n        {\n            OnConnected = onConnected,\n            OnClose = onClose,\n        };\n        codec.Register(Convert.ToUInt16(pb.CmdTest.CmdHeartBeat), pb.HeartBeatRes.Descriptor);\n        codec.Register(Convert.ToUInt16(pb.CmdTest.Message), pb.TestMessage.Descriptor);\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        processPackets();\n    }\n\n    void onConnected(IConnection connection, bool success)\n    {\n        Debug.LogFormat(\"onConnected:{0} host:{1}\", success, m_Connection.GetHostAddress());\n    }\n    \n    void onClose(IConnection connection)\n    {\n        Debug.LogFormat(\"onClode\");\n    }\n\n    void processPackets()\n    {\n        while (m_Connection.IsConnected())\n        {\n            var packet = m_Connection.PopPacket();\n            if (packet == null)\n            {\n                break;\n            }\n            // write your logic code here\n            Debug.LogFormat(\"recv cmd:{0} msg:{1}\", packet.Command(), packet.Message());\n        }\n        m_HeartBeatCounter += Time.deltaTime;\n        if (m_Connection.GetConfig().HeartBeatInterval \u003e 0 \u0026\u0026\n            m_HeartBeatCounter \u003e m_Connection.GetConfig().HeartBeatInterval)\n        {\n            m_HeartBeatCounter = 0;\n            m_Connection.Send(Convert.ToUInt16(CmdTest.CmdHeartBeat), new HeartBeatReq\n                {\n                    Timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(),\n                }\n            );\n            Debug.LogFormat(\"ping\");\n        }\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffish-tennis%2Fgnet_csharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffish-tennis%2Fgnet_csharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffish-tennis%2Fgnet_csharp/lists"}