Skip to content

Commit 2890d30

Browse files
committed
WIP
1 parent 8961924 commit 2890d30

Some content is hidden

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

54 files changed

+3217
-2548
lines changed

.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: 7 additions & 6 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,7 +50,7 @@ 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

demo/server.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
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.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{})
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+
demo.onClientJoin(socket)
45+
})
46+
}
47+
48+
func (demo *Demo) run() {
49+
log.Printf("Demo is running")
50+
for {
51+
select {
52+
case m := <-demo.sockets.In:
53+
switch m.Message.Name {
54+
case "ping":
55+
demo.handlePing(m.Socket, m.Message)
56+
case "greeting":
57+
demo.handleGreeting(m.Socket, m.Message)
58+
default:
59+
log.Printf("[socket #%d] '%s': %v", m.Socket.ID, m.Message.Name, m.Message.Data)
60+
}
61+
case socket := <-demo.sockets.Out:
62+
demo.onClientLeave(socket)
63+
// switch e.Name {
64+
// case "socket:join":
65+
// demo.onClientJoin(e.Data.(*netcode.Socket))
66+
// case "socket:leave":
67+
// demo.onClientLeave(e.Data.(*netcode.Socket))
68+
// default:
69+
// log.Printf("event '%s': %v", e.Name, e.Data)
70+
// }
71+
}
72+
}
73+
}
74+
75+
func (demo *Demo) broadcastTotal() {
76+
demo.sockets.SendAll(
77+
&netcode.Message{"total", uint8(demo.sockets.Count())},
78+
)
79+
}
80+
81+
func (demo *Demo) onClientJoin(s *netcode.Socket) {
82+
log.Printf("Client #%d joined.", s.ID)
83+
s.Send(&netcode.Message{"id", uint8(s.ID)})
84+
demo.broadcastTotal()
85+
}
86+
87+
func (demo *Demo) onClientLeave(s *netcode.Socket) {
88+
log.Printf("Client #%d left.", s.ID)
89+
demo.broadcastTotal()
90+
}
91+
92+
func (demo *Demo) handlePing(s *netcode.Socket, m *netcode.Message) {
93+
log.Printf("Client #%d ping: %d.", s.ID, m.Data)
94+
s.Send(&netcode.Message{"pong", uint(time.Now().UnixMilli())})
95+
s.Send(&netcode.Message{"inverse", true})
96+
}
97+
98+
func (demo *Demo) handleGreeting(s *netcode.Socket, m *netcode.Message) {
99+
log.Printf("Client #%d greets you: '%s'.", s.ID, m.Data)
100+
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."})
101+
}

demo-server.js renamed to demo/server.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
const { Server, BinaryEncoder, Codec, UInt8Codec, UInt16Codec, UIntLongCodec, BooleanCodec, StringLongCodec } = require('./server');
1+
import netcode from '../server.cjs';
2+
const { Server, BinaryEncoder, UInt8Codec, UIntLongCodec, BooleanCodec, StringLongCodec, } = netcode;
23

34
// Register your events
45
const encoder = new BinaryEncoder([
@@ -16,26 +17,26 @@ const server = new Server(port, '127.0.0.1', encoder, 3);
1617

1718
// Listen for new clients
1819
server.on('client:join', client => {
19-
console.log('Client %s joined.', client.id);
20+
console.info('Client %s joined.', client.id);
2021

2122
// Listen for "ping" event
2223
client.on('ping', ping => {
2324
// Answer with a "pong" event
2425
client.send('pong', Date.now());
25-
console.log('Client %s ping received: %s.', client.id, ping);
26+
console.info('Client %s ping received: %s.', client.id, ping);
2627

2728
// Send a "inverse" event
2829
client.send('inverse', true);
2930
});
3031

3132
// Listen for "inverse" event
3233
client.on('inverse', status => {
33-
console.log('Client %s inverse received: %s.', client.id, status);
34+
console.info('Client %s inverse received: %s.', client.id, status);
3435
});
3536

3637
// Listen for "greeting" event
3738
client.on('greeting', message => {
38-
console.log('Client %s greets you: "%s"', client.id, message);
39+
console.info('Client %s greets you: "%s"', client.id, message);
3940
// Send a "greeting" event
4041
client.send('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.');
4142
});
@@ -48,15 +49,15 @@ server.on('client:join', client => {
4849

4950
// Listen for disconnecting clients
5051
server.on('client:leave', client => {
51-
console.log('Client %s left.', client.id);
52+
console.info('Client %s left.', client.id);
5253
broadcastTotal();
5354
});
5455

55-
server.on('ready', () => console.log('Listening on port %s', port));
56+
server.on('ready', () => console.info('Listening on port %s', port));
5657

5758
function broadcastTotal() {
5859
const { length } = server.clients;
5960
server.clients.forEach(client => client.send('total', length));
6061
}
6162

62-
module.exports = server;
63+
export default server;

0 commit comments

Comments
 (0)