From: jxnshi Date: Fri, 31 Jan 2025 21:29:34 +0000 (+0100) Subject: Update X-Git-Url: https://jxnshi.xyz/repos?a=commitdiff_plain;h=ca476538efd92f75e2aa71f61cc8de800750f243;p=mesange.git Update --- diff --git a/client-cli/host.odin b/client-cli/host.odin index 0d3c4d4..d1f280c 100644 --- a/client-cli/host.odin +++ b/client-cli/host.odin @@ -54,32 +54,14 @@ request_host :: proc( 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 { diff --git a/common/request.odin b/common/request.odin index 9bfcfb7..ecf7793 100644 --- a/common/request.odin +++ b/common/request.odin @@ -168,12 +168,7 @@ Client_Request :: struct { 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 @@ -271,13 +266,12 @@ client_request_verify :: proc(request: Client_Request, expiration: Maybe(i64)) - 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 { @@ -285,7 +279,30 @@ 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 diff --git a/server/client.odin b/server/client.odin index 188af73..3582f51 100644 --- a/server/client.odin +++ b/server/client.odin @@ -16,8 +16,11 @@ receive_request :: proc(client: net.TCP_Socket) -> (id: u32, request: common.Cli 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 }