UDPSocket.go
package ipc
import (
"bytes"
"encoding/gob"
"log"
"net"
"time"
)
type UDPSocket struct {
UDPBase
listeners map[string]func(interface{}) interface{}
conn *net.UDPConn
addr *net.UDPAddr
}
func NewUDPSocket(addr string, port int) *UDPSocket {
socket := &UDPSocket{
UDPBase: UDPBase{
addr: addr,
port: port,
mtu: 32000,
},
listeners: make(map[string]func(interface{}) interface{}),
}
socket.create(addr, port)
return socket
}
func (u *UDPSocket) create(addr string, port int) {
u.addr, _ = net.ResolveUDPAddr("udp", net.JoinHostPort(addr, string(port)))
u.conn, _ = net.ListenUDP("udp", u.addr)
if u.conn == nil {
log.Println("UDPSocket create failed.")
}
}
func (u *UDPSocket) bind() {
if u.conn == nil {
log.Println("UDPSocket bind failed.")
}
}
func (u *UDPSocket) addListener(key string, handler func(interface{}) interface{}) {
u.listeners[key] = handler
}
func (u *UDPSocket) listen() {
buffer := make([]byte, u.mtu)
for {
n, addr, err := u.conn.ReadFromUDP(buffer)
if err != nil {
log.Println("Failed to read from UDP connection:", err)
continue
}
typeByte := buffer[0]
data := buffer[1:n]
var deserializedData interface{}
dec := gob.NewDecoder(bytes.NewReader(data))
err = dec.Decode(&deserializedData)
if err != nil {
log.Println("Failed to deserialize data:", err)
continue
}
responseData := u.run(string(typeByte), deserializedData)
var responseBuffer bytes.Buffer
enc := gob.NewEncoder(&responseBuffer)
err = enc.Encode(responseData)
if err != nil {
log.Println("Failed to serialize response:", err)
continue
}
response := append([]byte{typeByte}, responseBuffer.Bytes()...)
_, err = u.conn.WriteToUDP(response, addr)
if err != nil {
log.Println("Failed to send response:", err)
}
}
}
func (u *UDPSocket) run(command string, data interface{}) interface{} {
handler, exists := u.listeners[command]
if exists {
return handler(data)
}
return nil
}UDPSocket ๊ตฌ์กฐ์ฒด
UDPSocket ๊ตฌ์กฐ์ฒดNewUDPSocket ํจ์
NewUDPSocket ํจ์create ๋ฉ์๋
create ๋ฉ์๋bind ๋ฉ์๋
bind ๋ฉ์๋addListener ๋ฉ์๋
addListener ๋ฉ์๋listen ๋ฉ์๋
listen ๋ฉ์๋run ๋ฉ์๋
run ๋ฉ์๋์์ฝ
Last updated