Skip to content

Commit 8961924

Browse files
committed
Refactoring
1 parent 2a3b48a commit 8961924

17 files changed

Lines changed: 287 additions & 283 deletions

demo-server.go

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,50 @@ import (
44
"flag"
55
"log"
66
"math"
7-
"github.com/Tom32i/netcode/internal/codec"
8-
"github.com/Tom32i/netcode/internal/server"
7+
netcode "github.com/Tom32i/netcode/go"
8+
"github.com/gorilla/websocket"
9+
"net/http"
910
"time"
1011
)
1112

12-
type DemoServer struct {
13-
server *server.Server
13+
type Demo struct {
14+
room *netcode.Room
1415
}
1516

1617
func main() {
1718
port := flag.Int("port", 8002, "Port to run on")
1819

1920
flag.Parse()
2021

21-
encoder := codec.CreateBinaryEncoder([]*codec.RegisteredCodec{
22-
{0, "id", codec.UInt8Codec{}},
23-
{1, "ping", codec.LongUIntCodec{6}},
24-
{2, "pong", codec.LongUIntCodec{6}},
25-
{3, "inverse", codec.BooleanCodec{}},
26-
{4, "greeting", codec.StringLongCodec{}},
27-
{5, "total", codec.UInt8Codec{}},
28-
}, codec.UInt8Codec{})
22+
encoder := netcode.CreateBinaryEncoder([]*netcode.RegisteredCodec{
23+
{0, "id", netcode.UInt8Codec{}},
24+
{1, "ping", netcode.LongUIntCodec{6}},
25+
{2, "pong", netcode.LongUIntCodec{6}},
26+
{3, "inverse", netcode.BooleanCodec{}},
27+
{4, "greeting", netcode.StringLongCodec{}},
28+
{5, "total", netcode.UInt8Codec{}},
29+
}, netcode.UInt8Codec{})
2930

30-
clients := server.CreateClientDirectory(uint(math.Pow(2, 8)))
31-
server := server.CreateServer(*port, encoder, clients)
32-
33-
demo := DemoServer{&server}
31+
clients := netcode.CreateClientDirectory(uint(math.Pow(2, 8)))
32+
room := netcode.CreateRoom(clients, encoder)
33+
demo := Demo{room}
3434

3535
go demo.run()
3636

37-
demo.server.Start()
37+
netcode.Start(*port, "/", func (socket *websocket.Conn, request *http.Request) {
38+
err := room.Join(socket)
39+
40+
if err != nil {
41+
log.Fatal(err)
42+
}
43+
})
3844
}
3945

40-
func (demo *DemoServer) run() {
46+
func (demo *Demo) run() {
4147
log.Printf("Demo is running")
4248
for {
4349
select {
44-
case m := <-demo.server.In:
50+
case m := <-demo.room.In:
4551
switch m.Message.Name {
4652
case "ping":
4753
demo.handlePing(m.Client, m.Message)
@@ -50,43 +56,43 @@ func (demo *DemoServer) run() {
5056
default:
5157
log.Printf("[client #%d] '%s': %v", m.Client.ID, m.Message.Name, m.Message.Data)
5258
}
53-
case e := <-demo.server.Out:
59+
case e := <-demo.room.Out:
5460
switch e.Name {
5561
case "client:join":
56-
demo.onClientJoin(e.Data.(*server.Client))
62+
demo.onClientJoin(e.Data.(*netcode.Client))
5763
case "client:leave":
58-
demo.onClientLeave(e.Data.(*server.Client))
64+
demo.onClientLeave(e.Data.(*netcode.Client))
5965
default:
6066
log.Printf("event '%s': %v", e.Name, e.Data)
6167
}
6268
}
6369
}
6470
}
6571

66-
func (demo *DemoServer) broadcastTotal() {
67-
message := codec.Message{"total", uint8(demo.server.Clients.Count())}
68-
buf := demo.server.Encoder.Encode(message)
69-
demo.server.Clients.ForEach(func(c *server.Client) { c.Write(buf) })
72+
func (demo *Demo) broadcastTotal() {
73+
message := &netcode.Message{"total", uint8(demo.room.Clients.Count())}
74+
buf := demo.room.Encoder.Encode(message)
75+
demo.room.Clients.ForEach(func(c *netcode.Client) { c.Write(buf) })
7076
}
7177

72-
func (demo *DemoServer) onClientJoin(c *server.Client) {
78+
func (demo *Demo) onClientJoin(c *netcode.Client) {
7379
log.Printf("Client #%d joined.", c.ID)
74-
c.Send(codec.Message{"id", uint8(c.ID)})
80+
c.Send(&netcode.Message{"id", uint8(c.ID)})
7581
demo.broadcastTotal()
7682
}
7783

78-
func (demo *DemoServer) onClientLeave(c *server.Client) {
84+
func (demo *Demo) onClientLeave(c *netcode.Client) {
7985
log.Printf("Client #%d left.", c.ID)
8086
demo.broadcastTotal()
8187
}
8288

83-
func (demo *DemoServer) handlePing(c *server.Client, m codec.Message) {
89+
func (demo *Demo) handlePing(c *netcode.Client, m *netcode.Message) {
8490
log.Printf("[client #%d] ping %d", c.ID, m.Data)
85-
c.Send(codec.Message{"pong", uint(time.Now().UnixMilli())})
86-
c.Send(codec.Message{"inverse", true})
91+
c.Send(&netcode.Message{"pong", uint(time.Now().UnixMilli())})
92+
c.Send(&netcode.Message{"inverse", true})
8793
}
8894

89-
func (demo *DemoServer) handleGreeting(c *server.Client, m codec.Message) {
95+
func (demo *Demo) handleGreeting(c *netcode.Client, m *netcode.Message) {
9096
log.Printf("Client #%d greets you: '%s'", c.ID, m.Data)
91-
c.Send(codec.Message{"greeting", "Hello, I'm server! 😊 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut imperdiet molestie libero, ut sollicitudin tortor dignissim quis. Nulla iaculis nisi turpis, a malesuada nibh faucibus a. Nunc tellus lorem, varius sit amet tellus eu, dictum consectetur nulla."})
97+
c.Send(&netcode.Message{"greeting", "Hello, I'm server! 😊 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut imperdiet molestie libero, ut sollicitudin tortor dignissim quis. Nulla iaculis nisi turpis, a malesuada nibh faucibus a. Nunc tellus lorem, varius sit amet tellus eu, dictum consectetur nulla."})
9298
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
package server
1+
package netcode
22

33
import (
4-
"github.com/Tom32i/netcode/internal/codec"
5-
//"github.com/Tom32i/netcode/internal/security"
64
//"github.com/google/uuid"
75
"github.com/gorilla/websocket"
86
"log"
@@ -11,27 +9,27 @@ import (
119
type Client struct {
1210
ID uint
1311
//uuid uuid.UUID
14-
IP string
12+
// IP strings
1513
//token security.Token
16-
in chan ClientMessage
14+
In chan ClientMessage
1715
socket *websocket.Conn
18-
encoder *codec.BinaryEncoder
16+
encoder *BinaryEncoder
1917
}
2018

2119
type ClientMessage struct {
2220
Client *Client
23-
Message codec.Message
21+
Message *Message
2422
}
2523

26-
func (c *Client) Send(message codec.Message) {
24+
func (c *Client) Send(message *Message) {
2725
c.Write(c.encoder.Encode(message))
2826
}
2927

3028
func (c *Client) Write(data []byte) {
3129
c.socket.WriteMessage(websocket.BinaryMessage, data)
3230
}
3331

34-
func (c *Client) run(onClose func(*Client)) {
32+
func (c *Client) Run(onClose func(*Client)) {
3533
defer func() {
3634
c.socket.Close()
3735
onClose(c)
@@ -47,6 +45,6 @@ func (c *Client) run(onClose func(*Client)) {
4745
break
4846
}
4947

50-
c.in <- ClientMessage{c, c.encoder.Decode(data)}
48+
c.In <- ClientMessage{c, c.encoder.Decode(data)}
5149
}
5250
}

go/client_directory.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package netcode
2+
3+
import (
4+
"errors"
5+
)
6+
7+
type ClientDirectory struct {
8+
List map[uint]*Client
9+
max uint
10+
}
11+
12+
func (d *ClientDirectory) generateId() (uint, error) {
13+
for id := uint(0); id < d.max; id++ {
14+
_, ok := d.List[id]
15+
16+
if !ok {
17+
return id, nil
18+
}
19+
}
20+
21+
return uint(0), errors.New("Client limit reached!")
22+
}
23+
24+
func (d *ClientDirectory) Add(c *Client) error {
25+
id, err := d.generateId()
26+
27+
if err != nil {
28+
return err
29+
}
30+
31+
c.ID = id
32+
33+
d.List[c.ID] = c
34+
35+
return nil
36+
}
37+
38+
func (d *ClientDirectory) Remove(c *Client) {
39+
delete(d.List, c.ID)
40+
}
41+
42+
func (d *ClientDirectory) Count() int {
43+
return len(d.List)
44+
}
45+
46+
func (d *ClientDirectory) ForEach(callback func(*Client)) {
47+
for _, c := range d.List {
48+
callback(c)
49+
}
50+
}
51+
52+
func (d *ClientDirectory) ForOther(client *Client, callback func(*Client)) {
53+
for _, c := range d.List {
54+
if c.ID != client.ID {
55+
callback(c)
56+
}
57+
}
58+
}
59+
60+
61+
func CreateClientDirectory(max uint) *ClientDirectory {
62+
return &ClientDirectory{make(map[uint]*Client), max}
63+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -7,14 +7,14 @@ import (
77
type BooleanCodec struct {
88
}
99

10-
func (c BooleanCodec) encode(buffer *bytes.Buffer, data any) {
10+
func (c BooleanCodec) Encode(buffer *bytes.Buffer, data any) {
1111
if data.(bool) {
1212
buffer.WriteByte(1)
1313
} else {
1414
buffer.WriteByte(0)
1515
}
1616
}
1717

18-
func (c BooleanCodec) decode(buffer *bytes.Buffer) any {
18+
func (c BooleanCodec) Decode(buffer *bytes.Buffer) any {
1919
return buffer.Next(1)[0] > 0
2020
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -7,13 +7,13 @@ import (
77
type StringCodec struct {
88
}
99

10-
func (c StringCodec) encode(buffer *bytes.Buffer, data any) {
10+
func (c StringCodec) Encode(buffer *bytes.Buffer, data any) {
1111
length := len(data.(string))
1212
buffer.WriteByte(uint8(length))
1313
buffer.WriteString(data.(string))
1414
}
1515

16-
func (c StringCodec) decode(buffer *bytes.Buffer) any {
16+
func (c StringCodec) Decode(buffer *bytes.Buffer) any {
1717
length := int(buffer.Next(1)[0])
1818

1919
return string(buffer.Next(length))
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -8,7 +8,7 @@ import (
88
type StringLongCodec struct {
99
}
1010

11-
func (c StringLongCodec) encode(buffer *bytes.Buffer, data any) {
11+
func (c StringLongCodec) Encode(buffer *bytes.Buffer, data any) {
1212
length := len(data.(string))
1313

1414
b := make([]byte, 2)
@@ -18,7 +18,7 @@ func (c StringLongCodec) encode(buffer *bytes.Buffer, data any) {
1818
buffer.WriteString(data.(string))
1919
}
2020

21-
func (c StringLongCodec) decode(buffer *bytes.Buffer) any {
21+
func (c StringLongCodec) Decode(buffer *bytes.Buffer) any {
2222
length := binary.BigEndian.Uint16(buffer.Next(2))
2323

2424
return string(buffer.Next(int(length)))
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -8,12 +8,12 @@ import (
88
type UInt16Codec struct {
99
}
1010

11-
func (c UInt16Codec) encode(buffer *bytes.Buffer, data any) {
11+
func (c UInt16Codec) Encode(buffer *bytes.Buffer, data any) {
1212
b := make([]byte, 2)
1313
binary.BigEndian.PutUint16(b, data.(uint16))
1414
buffer.Write(b)
1515
}
1616

17-
func (c UInt16Codec) decode(buffer *bytes.Buffer) any {
17+
func (c UInt16Codec) Decode(buffer *bytes.Buffer) any {
1818
return binary.BigEndian.Uint16(buffer.Next(2))
1919
}

go/codec_uint8.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package netcode
2+
3+
import (
4+
"bytes"
5+
)
6+
7+
type UInt8Codec struct {
8+
}
9+
10+
func (c UInt8Codec) Encode(buffer *bytes.Buffer, data any) {
11+
buffer.WriteByte(data.(uint8))
12+
}
13+
14+
func (c UInt8Codec) Decode(buffer *bytes.Buffer) any {
15+
return buffer.Next(1)[0]
16+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -10,7 +10,7 @@ type LongUIntCodec struct {
1010
ByteLength int
1111
}
1212

13-
func (c LongUIntCodec) encode(buffer *bytes.Buffer, data any) {
13+
func (c LongUIntCodec) Encode(buffer *bytes.Buffer, data any) {
1414
format := fmt.Sprintf("%%0%ds", c.ByteLength*8)
1515
value := strconv.FormatUint(uint64(data.(uint)), 2)
1616
value = fmt.Sprintf(format, value)
@@ -21,7 +21,7 @@ func (c LongUIntCodec) encode(buffer *bytes.Buffer, data any) {
2121
}
2222
}
2323

24-
func (c LongUIntCodec) decode(buffer *bytes.Buffer) any {
24+
func (c LongUIntCodec) Decode(buffer *bytes.Buffer) any {
2525
var buf = new(bytes.Buffer)
2626
parts := buffer.Next(c.ByteLength)
2727

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package codec
1+
package netcode
22

33
import (
44
"bytes"
@@ -8,12 +8,12 @@ import (
88
type UInt32Codec struct {
99
}
1010

11-
func (c UInt32Codec) encode(buffer *bytes.Buffer, data any) {
11+
func (c UInt32Codec) Encode(buffer *bytes.Buffer, data any) {
1212
b := make([]byte, 4)
1313
binary.BigEndian.PutUint32(b, data.(uint32))
1414
buffer.Write(b)
1515
}
1616

17-
func (c UInt32Codec) decode(buffer *bytes.Buffer) any {
17+
func (c UInt32Codec) Decode(buffer *bytes.Buffer) any {
1818
return binary.BigEndian.Uint32(buffer.Next(4))
1919
}

0 commit comments

Comments
 (0)