-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
76 lines (64 loc) · 1.48 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
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
)
type Connection struct {
conn net.Conn
buffer *bufio.ReadWriter
handler Handler
}
type Server struct {
port int
log *log.Logger
connections int
totalConnections int
}
func NewServer(port int, log *log.Logger) *Server {
return &Server{port, log, 0, 0}
}
func (server *Server) Handle(c *Connection) {
c.SendString(red + "great now bye\n")
//req.conn.Close()
//server.connections--
}
func (server *Server) Logger() *log.Logger {
return server.log
}
func (server *Server) Serve() error {
listener, err := net.Listen("tcp", fmt.Sprintf(":%d", server.port))
if err != nil {
server.log.Printf("cannot start server: %s\n", err)
os.Exit(1)
}
server.log.Printf("waiting for connections on %s\n", listener.Addr())
for {
conn, err := listener.Accept()
if err != nil {
server.log.Printf("could not accept: %s\n", err)
} else {
server.log.Printf("connected: %s\n", conn.RemoteAddr())
server.connections++
server.totalConnections++
go server.Handle(NewConnection(conn))
}
}
}
func NewConnection(connection net.Conn) *Connection {
return &Connection{
conn: connection,
buffer: bufio.NewReadWriter(bufio.NewReader(connection), bufio.NewWriter(connection)),
}
}
func (c *Connection) SendString(text string) {
c.conn.Write([]byte(text))
}
func (c *Connection) BufferData(text string) {
c.buffer.Write([]byte(text))
}
func (c *Connection) SendBuffer() {
c.buffer.Flush()
}