Skip to content

Commit

Permalink
initial packet registry &etc
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperErnD committed Jul 30, 2024
1 parent cbd5ab3 commit 4fcbcd3
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 0 deletions.
26 changes: 26 additions & 0 deletions client/src/network/packetregistry.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
module network

import network.types
import network.packets

// A registry of packets!

pub enum Packets {
init = 0x00
}

pub struct PRegistry {
pub mut:
registry map[Packets]types.Packet
}

pub fn (mut preg PRegistry) register(packet Packets, s types.Packet) {
preg.registry[packet] = s
}

pub fn (mut preg PRegistry) init() {
// Registers all packets
preg.register(Packets.init, packets.InitPacket{})
}

// TODO: Read packet
26 changes: 26 additions & 0 deletions client/src/network/packets/init.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
module packets

import network.types

pub struct InitPacket {
pub mut:
version = $d('ver', 'git-commit-?')
}

pub fn (mut ip InitPacket) write(mut w types.Writer) {
w.write_string(ip.version)
}

pub fn (mut ip InitPacket) read(mut r types.Reader) {
ip.version = r.read_string()
}

pub fn (mut ip InitPacket) clear() {
ip.version = $d('ver', 'git-commit-?')
}

pub fn (mut ip InitPacket) clone() InitPacket {
return InitPacket{
version: ip.version
}
}
10 changes: 10 additions & 0 deletions client/src/network/types/packet.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module types

// Generic interface to packet (e.g. write/read/clear/clone)

pub interface Packet {
write(mut Writer) !
read(mut Reader) !
clear()
clone() Packet
}
46 changes: 46 additions & 0 deletions client/src/network/types/reader.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
module types

import encoding.binary

pub struct Reader {
mut:
buffer []u8
}

pub fn (mut r Reader) read_u8() u8 {
a := r.buffer[0]
r.buffer.delete_many(0, 1)
return a
}

pub fn (mut r Reader) read_u16() u16 {
a := binary.little_endian_u16(r.buffer)
r.buffer.delete_many(0, 2)
return a
}

pub fn (mut r Reader) read_u32() u32 {
a := binary.little_endian_u32(r.buffer)
r.buffer.delete_many(0, 4)
return a
}

pub fn (mut r Reader) read_u64() u64 {
a := binary.little_endian_u64(r.buffer)
r.buffer.delete_many(0, 8)
return a
}

pub fn (mut r Reader) read_string() string {
l := r.read_u32()
s := unsafe { tos(r.buffer.data, l) }
r.buffer.delete_many(0, l)
return s
}

pub fn (mut r Reader) read_bytearray() []u8 {
l := r.read_u32()
b := r.buffer[..l].clone()
r.buffer.delete_many(0, l)
return b
}
41 changes: 41 additions & 0 deletions client/src/network/types/writer.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
module types

import encoding.binary

pub struct Writer {
mut:
buffer []u8
}

pub fn (mut w Writer) write_u8(v u8) {
w.buffer << v // easy
}

pub fn (mut w Writer) write_u16(v u16) {
w.buffer << []u8{len:2}
binary.little_endian_put_u16_end(mut w.buffer, v)
}

pub fn (mut w Writer) write_u32(v u32) {
w.buffer << []u8{len:4}
binary.little_endian_put_u32_end(mut w.buffer, v)
}

pub fn (mut w Writer) write_u64(v u64) {
w.buffer << []u8{len:8}
binary.little_endian_put_u64_end(mut w.buffer, v)
}

// Now how about string, bytearray?

pub fn (mut w Writer) write_string(str string) {
w.write_u32(u32(str.len))
w.buffer << str.bytes()
}

pub fn (mut w Writer) read_bytearray(buf []u8) {
w.write_u32(u32(buf.len))
w.buffer << buf
}

// TODO: f32/f64

0 comments on commit 4fcbcd3

Please sign in to comment.