/
server.go
46 lines (37 loc) · 1.01 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
package main
import (
"bufio"
"net"
"time"
)
var sectionChar = "§"
type PingServer struct {
bindAddr string
Responder Responder // only responderhook can be hotswapped
bindConn net.Listener
}
func CreatePingServer(bindAddr string, hook Responder) *PingServer {
return &PingServer{bindAddr, hook, nil}
}
func (ps *PingServer) Bind() (err error) {
ps.bindConn, err = net.Listen("tcp", ps.bindAddr)
return
}
type PingServerErrorHandler func(error)
func (ps *PingServer) AcceptConnections(handler PingServerErrorHandler) (err error) {
for err == nil {
err = ps.AcceptConnection(handler)
}
return
}
func (ps *PingServer) AcceptConnection(handler PingServerErrorHandler) error {
conn, err := ps.bindConn.Accept()
if err != nil {
return err
}
conn.SetDeadline(time.Now().Add(5 * time.Second))
connInBuffer := bufio.NewReader(conn)
playerConn := PlayerConn{ps, connInBuffer, conn, handler}
go playerConn.handleConnection()
return nil
}