1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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);
}
|