{"id":26155536,"url":"https://github.com/ntdls/ntdls.datagrammessaging","last_synced_at":"2026-04-27T17:32:43.881Z","repository":{"id":213554505,"uuid":"734419821","full_name":"NTDLS/NTDLS.DatagramMessaging","owner":"NTDLS","description":"Just a friendly UDP packet framing, sending and receiving wrapper. It handles corruption checks, concatenation, fragmentation, serialization and adds compression.","archived":false,"fork":false,"pushed_at":"2026-02-05T20:27:56.000Z","size":277,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-06T05:59:47.184Z","etag":null,"topics":["internet","networking","nuget","udp"],"latest_commit_sha":null,"homepage":"https://networkdls.com/Entity/ntdls-datagrammessaging","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/NTDLS.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-12-21T16:24:38.000Z","updated_at":"2026-02-05T20:27:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"e00de553-f6a8-43f5-ae94-b713a5a380ac","html_url":"https://github.com/NTDLS/NTDLS.DatagramMessaging","commit_stats":null,"previous_names":["ntdls/ntdls.udppacketframing"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/NTDLS/NTDLS.DatagramMessaging","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NTDLS%2FNTDLS.DatagramMessaging","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NTDLS%2FNTDLS.DatagramMessaging/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NTDLS%2FNTDLS.DatagramMessaging/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NTDLS%2FNTDLS.DatagramMessaging/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NTDLS","download_url":"https://codeload.github.com/NTDLS/NTDLS.DatagramMessaging/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NTDLS%2FNTDLS.DatagramMessaging/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32348046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["internet","networking","nuget","udp"],"created_at":"2025-03-11T08:57:06.811Z","updated_at":"2026-04-27T17:32:43.876Z","avatar_url":"https://github.com/NTDLS.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NTDLS.DatagramMessaging\r\n\r\n📦 Be sure to check out the NuGet package: https://www.nuget.org/packages/NTDLS.DatagramMessaging\r\n\r\nNTDLS.DatagramMessaging is a set of classes and extensions methods that allow you to send/receive\r\nUDP packets with ease. It handles corruption checks, concatenation, fragmentation, serialization,\r\ncompression and encryption.\r\n\r\n## UDP Sever (Event based):\r\n\u003e Here we are instantiating a DmMessenger and giving it a listen port. This will cause the\r\n\u003e manager to go into listen mode. Any received messages will handled by the OnDatagramReceived event.\r\n```csharp\r\nstatic void Main()\r\n{\r\n    using var messenger = new DmMessenger(1234);\r\n\r\n    messenger.OnDatagramReceived += messenger_OnDatagramReceived;\r\n\r\n    Console.WriteLine(\"Press enter to quit.\");\r\n    Console.ReadLine();\r\n}\r\n\r\nprivate static void Messenger_OnDatagramReceived(DmContext context, IDmDatagram datagram)\r\n{\r\n    if (datagram is MyFirstUDPPacket myFirstUDPPacket)\r\n    {\r\n        context.Dispatch(myFirstUDPPacket); //Echo the datagram back to the sender.\r\n        Console.WriteLine($\"{myFirstUDPPacket.Message}-\u003e{myFirstUDPPacket.UID}-\u003e{myFirstUDPPacket.TimeStamp}\");\r\n    }\r\n}\r\n```\r\n\r\n## UDP Sever (Convention based):\r\n\u003e Here we are instantiating a DmMessenger and giving it a listen port. This will cause the\r\n\u003e manager to go into listen mode. Any received messages will handled by the class HandlePackets\r\n\u003e which was suppled to the UDP messenger by a call to AddHandler().\r\n```csharp\r\nstatic void Main()\r\n{\r\n    var messenger = new DmMessenger(1234);\r\n\r\n    messenger.AddHandler(new HandlePackets());\r\n\r\n    Console.WriteLine(\"Press enter to quit.\");\r\n    Console.ReadLine();\r\n}\r\n\r\nprivate class HandlePackets : IDmMessageHandler\r\n{\r\n    private class HandlePackets : IDmMessageHandler\r\n    {\r\n        public static void DatagramHandler(DmContext context, MyFirstUDPPacket datagram)\r\n        {\r\n            context.Dispatch(datagram); //Echo the datagram back to the sender.\r\n            Console.WriteLine($\"{datagram.Message}-\u003e{datagram.UID}-\u003e{datagram.TimeStamp}\");\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n## UDP Client:\r\n\u003e Here we are instantiating a DmMessenger without a listen port. This means that this this\r\n\u003e messenger is in write-only mode. We are going to loop and send frames containing serialized MyFirstUDPPacket.\r\n\u003e Note that the we could also specify a handler for convention based message handling.\r\n```csharp\r\nstatic void Main()\r\n{\r\n    using var messenger = new DmMessenger();\r\n\r\n    messenger.OnDatagramReceived += messenger_OnDatagramReceived;\r\n\r\n    int packetNumber = 0;\r\n\r\n    var endpointCtx = messenger.GetEndpointContext(\"127.0.0.1\", 1234);\r\n\r\n    while (true)\r\n    {\r\n        messenger.Dispatch(new MyFirstUDPPacket($\"Packet#:{packetNumber++} \"), endpointCtx);\r\n        Thread.Sleep(10);\r\n    }\r\n\r\n    Console.WriteLine(\"Press enter to quit.\");\r\n    Console.ReadLine();\r\n}\r\n```\r\n\r\n## Supporting Code:\r\n\u003e The class that we are going to be serializing and deserializing in the examples.\r\n```csharp\r\npublic class MyFirstUDPPacket : IDmDatagram\r\n{\r\n    public DateTime TimeStamp { get; set; } = DateTime.UtcNow;\r\n    public Guid UID { get; set; } = Guid.NewGuid();\r\n    public string Message { get; set; } = string.Empty;\r\n\r\n    public MyFirstUDPPacket()\r\n    {\r\n    }\r\n\r\n    public MyFirstUDPPacket(string message)\r\n    {\r\n        Message = message;\r\n    }\r\n}\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntdls%2Fntdls.datagrammessaging","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fntdls%2Fntdls.datagrammessaging","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntdls%2Fntdls.datagrammessaging/lists"}