-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.go
64 lines (54 loc) · 1.11 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package remlog
import (
"bytes"
"fmt"
"io/ioutil"
"net"
"github.com/sirupsen/logrus"
)
type Service struct {
conn *net.UDPConn
log *logrus.Entry
}
func NewService(logger *logrus.Logger) *Service {
return &Service{
log: logger.WithFields(logrus.Fields{
"prefix": "remlog",
}),
}
}
func (s *Service) Run(logLine func(string)) error {
add := "0.0.0.0:6666"
s.log.Infof("starting service on: %s", add)
// resolve udp address
serverAddr, err := net.ResolveUDPAddr("", add)
if err != nil {
return err
}
// create udo server
s.conn, err = net.ListenUDP("udp", serverAddr)
if err != nil {
return err
}
go func() {
defer s.conn.Close()
// read buffer
buffer := make([]byte, 2048)
for {
n, address, err := s.conn.ReadFromUDP(buffer)
connectionLog := s.log.WithFields(logrus.Fields{
"address": fmt.Sprintf("%v", address),
})
if err != nil {
connectionLog.Errorf("error receive %v", err)
}
z := bytes.NewReader(buffer[0:n])
b, err := ioutil.ReadAll(z)
if err != nil {
connectionLog.Errorf("error read %v", err)
}
logLine(string(b))
}
}()
return nil
}