return id, nil
}
-receive_host :: proc(app: ^App) -> (message: common.Server_Message, err: common.Error) {
+receive_host :: proc(app: ^App) -> (id: u32, message: common.Server_Message, err: common.Error) {
buffer: [1_000]u8
packet := common.receive_packet(app.host.?) or_return
packet_buffer: bytes.Buffer
packet_buffer.buf = slice.into_dynamic(bytes_buf[:])
packet_stream := bytes.buffer_to_stream(&bytes_buffer)
- // Message type.
- message_type, _ := io.read_byte(packet_stream)
-
- // Message ID.
- id_bytes: [size_of(u32)]u8
- _, _ = io.read(packet_stream, id_bytes[:])
-
- id, _ := endian.get_u32(.Little, id_bytes[:])
-
- switch message_type {
- // Request.
- case 0:
-
- // Response.
- case 1:
-
- case:
- return nil, common.Receive_Message_Error.Invalid_Type
- }
+ return common.server_message_from_bytes(app.host.?, packet_stream)
}
wait_host_response :: proc(app: ^App, id: u32) -> common.Server_Response {
signature: [ed25519.SIGNATURE_SIZE]u8,
}
-client_request_from_bytes :: proc(input: []u8) -> (request: Client_Request, err: Error) {
- input := input
-
- bytes_buffer := bytes.Buffer{ buf = mem.buffer_from_slice(input) }
- stream := bytes.buffer_to_stream(&bytes_buffer)
-
+client_request_from_bytes :: proc(stream: io.Stream) -> (request: Client_Request, err: Error) {
public_key_bytes: [ed25519.PUBLIC_KEY_SIZE]u8
_ = io.read(stream, public_key_bytes[:]) or_return
Server_Request :: struct {}
-Server_Response_Inner :: union {
+Server_Response :: union {
string,
}
-Server_Response :: struct {
- id: u32,
- inner: Server_Response_Inner,
+server_response_from_bytes :: proc(stream: io.Stream) -> (response: Server_Response, err: Error) {
+
}
Server_Message :: union {
Server_Response,
}
-receive_packet :: proc(socket: net.Socket, buffer: []u8) -> (packet: []u8, err: Error) {
+server_message_from_bytes :: proc(server: net.TCP_Socket, stream: io.Stream) -> (id: u32, message: Server_Message, err: Error) {
+ // Message type.
+ message_type, _ := io.read_byte(stream)
+
+ // Message ID.
+ id_bytes: [size_of(u32)]u8
+ _, _ = io.read(stream, id_bytes[:])
+
+ id, _ := endian.get_u32(.Little, id_bytes[:])
+
+ switch message_type {
+ // Request.
+ case 0:
+
+ // Response.
+ case 1:
+
+
+ case:
+ return nil, common.Receive_Message_Error.Invalid_Type
+ }
+}
+
+receive_packet :: proc(socket: net.TCP_Socket, buffer: []u8) -> (packet: []u8, err: Error) {
length_bytes: [size_of(u32)]u8
_ = net.recv_tcp(client, length_bytes[:]) or_return
id, _ = endian.get_u32(id_bytes[:], .Little)
request_bytes := packet[size_of(u32):]
+ request_buffer: bytes.Buffer
+ request_buffer.buf = slice.into_dynamic(bytes_buf[:])
+ request_stream := bytes.buffer_to_stream(&bytes_buffer)
- request, err = common.client_request_from_bytes(request_bytes)
+ request, err = common.client_request_from_bytes(request_stream)
return id, request, err
}