aboutsummaryrefslogtreecommitdiff
path: root/src/server/s2c_sender.c
diff options
context:
space:
mode:
authorfschildt <florian.schildt@protonmail.com>2025-08-22 15:23:11 +0200
committerfschildt <florian.schildt@protonmail.com>2025-08-22 15:23:11 +0200
commit2050c0e0576f05156f192aa4caf48834d2f28b14 (patch)
treeee58bd35b0df0a1bacfbc9700ed99ce80c99294e /src/server/s2c_sender.c
first commitHEADmaster
Diffstat (limited to 'src/server/s2c_sender.c')
-rw-r--r--src/server/s2c_sender.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/server/s2c_sender.c b/src/server/s2c_sender.c
new file mode 100644
index 0000000..37e9ffc
--- /dev/null
+++ b/src/server/s2c_sender.c
@@ -0,0 +1,77 @@
+#include <server/s2c_sender.h>
+
+internal_var Arena s_send_arena;
+
+void
+send_s2c_chat_message(ClientConnection *conn, String32 *username, String32 *content, OSTime now)
+{
+ OSTime time = os_time_get_now();
+ Arena *arena = &s_send_arena;
+
+
+ S2C_ChatMessage *chat_message = arena_push(arena, sizeof(S2C_ChatMessage));
+
+ String32 *username_copy = string32_create_from_string32(arena, username);
+ chat_message->username = (String32*)((u8*)username_copy - (u8*)chat_message);
+
+ String32 *content_copy = string32_create_from_string32(arena, content);
+ chat_message->content = (String32*)((u8*)content_copy - (u8*)chat_message);
+
+ chat_message->epoch_time_seconds = time.seconds;
+ chat_message->epoch_time_nanoseconds = time.nanoseconds;
+
+ chat_message->header.type = S2C_CHAT_MESSAGE;
+ chat_message->header.size = arena->size_used;
+
+
+ os_net_secure_stream_send(conn->secure_stream_id, arena->memory, arena->size_used);
+ arena_clear(arena);
+}
+
+
+void
+send_s2c_user_update(ClientConnection *conn, String32 *username, u32 online_status)
+{
+ Arena *arena = &s_send_arena;
+
+
+ S2C_UserUpdate *user_update = arena_push(arena, sizeof(S2C_UserUpdate));
+
+ user_update->status = online_status;
+
+ String32 *username_copy = string32_create_from_string32(arena, username);
+ user_update->username = (String32*)((u8*)username_copy - (u8*)user_update);
+
+ user_update->header.type = S2C_USER_UPDATE;
+ user_update->header.size = arena->size_used;
+
+
+ os_net_secure_stream_send(conn->secure_stream_id, arena->memory, arena->size_used);
+ arena_clear(arena);
+}
+
+
+void
+send_s2c_login(ClientConnection *conn, u32 login_result)
+{
+ Arena *arena = &s_send_arena;
+
+
+ S2C_Login *login = arena_push(arena, sizeof(S2C_Login));
+ login->login_result = login_result;
+
+ login->header.type = S2C_LOGIN;
+ login->header.size = arena->size_used;
+
+
+ os_net_secure_stream_send(conn->secure_stream_id, arena->memory, arena->size_used);
+ arena_clear(arena);
+}
+
+
+void
+s2c_sender_init(Arena *arena)
+{
+ arena_init(&s_send_arena, 1408);
+}
+