diff options
Diffstat (limited to 'network/protocol.go')
-rw-r--r-- | network/protocol.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/network/protocol.go b/network/protocol.go new file mode 100644 index 0000000..e7c2536 --- /dev/null +++ b/network/protocol.go @@ -0,0 +1,39 @@ +package network + +import ( + "net" + "strconv" + "strings" + + "snix.ir/nanontp/engine" + "snix.ir/nanontp/getter" +) + +var handler *Handler + +type Handler struct { + engine.UdpHandler +} + +func GetHandler() *Handler { + if handler == nil { + handler = new(Handler) + } + return handler +} + +var UDPRemoteAddr *net.UDPAddr + +func (p *Handler) DatagramReceived(data []byte, addr net.Addr) { + res, err := getter.Serve(data, addr) + if err == nil { + ip, port := spliteAddr(addr.String()) + p.UdpWrite(string(res), ip, port) + } +} +func spliteAddr(addr string) (string, int) { + ip := strings.Split(addr, ":")[0] + port := strings.Split(addr, ":")[1] + p, _ := strconv.Atoi(port) + return ip, p +} |