Skip to content

Commit a02539e

Browse files
committed
WIP
1 parent 8961924 commit a02539e

57 files changed

Lines changed: 3376 additions & 2608 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.json

Lines changed: 0 additions & 39 deletions
This file was deleted.

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
/client.js
2-
/server.js
2+
/server.cjs
33
/node_modules

Makefile

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,33 @@ build:
1818
demo-client:
1919
php -S 0.0.0.0:8000 -t .
2020

21-
# Launch demo server
22-
demo-server:
21+
# Launch Node demo server
22+
demo-server-node: build
23+
node ./demo/server.js 8002
2324

24-
node ./demo-server.js 8002
25-
## Start server
25+
## Launch Golang demo server
2626
#demo-server-go: export GODEBUG=gctrace=1
2727
demo-server-go:
28-
go run demo-server.go
28+
go run demo/server.go
2929

3030
# Lint and code style fix
31-
lint:
32-
npx eslint src/* --ext .js,.json --fix
31+
lint: lint-js lint-go
32+
33+
lint-js:
34+
npx eslint demo/**/*.js src/** --fix
35+
36+
lint-go:
3337
gofmt -s -w .
3438

3539
# Test
36-
test: build
40+
test: test-js test-go
41+
42+
test-js: build
3743
npx mocha
3844

45+
test-go:
46+
go test ./go/...
47+
3948
# Publish package
4049
publish: build
4150
npm publish . --access public

demo-server.go

Lines changed: 0 additions & 98 deletions
This file was deleted.

demo-client.js renamed to demo/client.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
/* global netcode */
12
window.addEventListener('load', () => {
2-
const { Client, BinaryEncoder, Codec, UInt8Codec, UInt16Codec, UInt64Codec, UIntLongCodec, BooleanCodec, StringCodec, StringLongCodec } = netcode;
3+
const { Client, BinaryEncoder, UInt8Codec, UIntLongCodec, BooleanCodec, StringLongCodec } = netcode;
34

45
// Register your events
56
const encoder = new BinaryEncoder([
@@ -22,25 +23,25 @@ window.addEventListener('load', () => {
2223

2324
// Listen for an "id" event
2425
client.on('id', ({ detail: id }) => {
25-
console.log('connected with id %s', id);
26+
console.info('connected with id %s', id);
2627
ping = Date.now();
2728

28-
console.log('sending ping: %s', ping);
29+
console.info('sending ping: %s', ping);
2930

3031
// Send a "ping" event
3132
client.send('ping', ping);
3233
});
3334

3435
// Listen for a "total" event
3536
client.on('total', ({ detail: total }) => {
36-
console.log(`There is ${total} people connected.`)
37+
console.info(`There is ${total} people connected.`);
3738
});
3839

3940
// Listen for an "inverse" event
4041
client.on('inverse', ({ detail: status }) => {
4142
// Answer with an "inverse" event
4243
client.send('inverse', !status);
43-
console.log('Inverse received: %s', status);
44+
console.info('Inverse received: %s', status);
4445

4546
// Send a "greeting" event
4647
client.send('greeting', 'Hello, I\'m client 😊! 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.');
@@ -49,18 +50,17 @@ window.addEventListener('load', () => {
4950

5051
// Listen for a "greeting" event
5152
client.on('greeting', ({ detail: message }) => {
52-
console.log('Servers geets you: "%s"', message);
53+
console.info('Servers geets you: "%s"', message);
5354
});
5455

5556
// Listen for oppening connection
5657
client.on('open', () => {
5758
console.info('Connection open.');
58-
59-
setTimeout(() => client.close(), 20 * 1000);
59+
setTimeout(() => client.close(1000, 'All good :)'), 20 * 1000);
6060
});
6161

6262
// Listen for connection close
63-
client.on('close', () => {
64-
console.info('Connection closed.');
63+
client.on('close', (data) => {
64+
console.info('Connection closed.', data);
6565
});
6666
});

demo/server.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
netcode "github.com/Tom32i/netcode/go"
6+
"github.com/gorilla/websocket"
7+
"log"
8+
"math"
9+
"net/http"
10+
"time"
11+
)
12+
13+
type Demo struct {
14+
sockets *netcode.Sockets
15+
}
16+
17+
func main() {
18+
port := flag.Int("port", 8002, "Port to run on")
19+
20+
flag.Parse()
21+
22+
encoder := netcode.CreateBinaryEncoder([]*netcode.RegisteredCodec{
23+
{0, "id", netcode.UInt8Codec{}},
24+
{1, "ping", netcode.UIntLongCodec{6}},
25+
{2, "pong", netcode.UIntLongCodec{6}},
26+
{3, "inverse", netcode.BooleanCodec{}},
27+
{4, "greeting", netcode.StringLongCodec{}},
28+
{5, "total", netcode.UInt8Codec{}},
29+
}, netcode.UInt8Codec{})
30+
31+
demo := Demo{
32+
netcode.CreateSockets(encoder, uint(math.Pow(2, 8))),
33+
}
34+
35+
go demo.run()
36+
37+
netcode.Start(*port, "/", func(conn *websocket.Conn, request *http.Request) {
38+
socket, err := demo.sockets.Add(conn)
39+
40+
if err != nil {
41+
log.Fatal(err)
42+
}
43+
44+
netcode.CreateBeacon(socket, time.Second*3, func(ping time.Duration) {
45+
log.Printf("Client #%d ping: %s.", socket.ID, ping)
46+
})
47+
48+
demo.onClientJoin(socket)
49+
})
50+
}
51+
52+
func (demo *Demo) run() {
53+
log.Printf("Demo is running")
54+
for {
55+
select {
56+
case m := <-demo.sockets.In:
57+
switch m.Message.Name {
58+
case "ping":
59+
demo.handlePing(m.Socket, m.Message)
60+
case "greeting":
61+
demo.handleGreeting(m.Socket, m.Message)
62+
default:
63+
log.Printf("[socket #%d] '%s': %v", m.Socket.ID, m.Message.Name, m.Message.Data)
64+
}
65+
case socket := <-demo.sockets.Out:
66+
demo.onClientLeave(socket)
67+
// switch e.Name {
68+
// case "socket:join":
69+
// demo.onClientJoin(e.Data.(*netcode.Socket))
70+
// case "socket:leave":
71+
// demo.onClientLeave(e.Data.(*netcode.Socket))
72+
// default:
73+
// log.Printf("event '%s': %v", e.Name, e.Data)
74+
// }
75+
}
76+
}
77+
}
78+
79+
func (demo *Demo) broadcastTotal() {
80+
demo.sockets.SendAll(
81+
&netcode.Message{"total", uint8(demo.sockets.Count())},
82+
)
83+
}
84+
85+
func (demo *Demo) onClientJoin(s *netcode.Socket) {
86+
log.Printf("Client #%d joined.", s.ID)
87+
s.Send(&netcode.Message{"id", uint8(s.ID)})
88+
demo.broadcastTotal()
89+
}
90+
91+
func (demo *Demo) onClientLeave(s *netcode.Socket) {
92+
log.Printf("Client #%d left.", s.ID)
93+
demo.broadcastTotal()
94+
}
95+
96+
func (demo *Demo) handlePing(s *netcode.Socket, m *netcode.Message) {
97+
log.Printf("Client #%d ping: %d.", s.ID, m.Data)
98+
s.Send(&netcode.Message{"pong", uint(time.Now().UnixMilli())})
99+
s.Send(&netcode.Message{"inverse", true})
100+
}
101+
102+
func (demo *Demo) handleGreeting(s *netcode.Socket, m *netcode.Message) {
103+
log.Printf("Client #%d greets you: '%s'.", s.ID, m.Data)
104+
s.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."})
105+
}

0 commit comments

Comments
 (0)