-Room_Name :: small_array.Small_Array(common.ROOM_NAME_SIZE, u8)
-
-Room :: struct {
- name: Room_Name,
- key: [common.ROOM_KEY_SIZE]u8,
-}
-
-room_init :: proc(name: string, key: [common.ROOM_KEY_SIZE]u8) -> (Room, bool) {
- _, name_len, _ := utf8.grapheme_count(name)
-
- if name_len > common.ROOM_NAME_LEN {
- return {}, false
- }
-
- name_bytes := transmute([]u8)name
-
- room_name: Room_Name
- small_array.append_elems(&room_name, ..name_bytes)
-
- return {
- name = room_name,
- key = key,
- },
- true
-}
-
-room_init_with_key_string :: proc(name: string, key_string: string) -> (Room, bool) {
- if len(key_string) != 44 {
- return {}, false
- }
-
- key_bytes: [common.ROOM_KEY_SIZE]u8
-
- key_bytes_buffer := bytes.Buffer{ buf = mem.buffer_from_slice(key_bytes[:]) }
- key_bytes_stream := bytes.buffer_to_stream(&key_bytes_buffer)
-
- err := base64.decode_into(key_bytes_stream, key_string)
-
- if err != nil {
- return {}, false
- }
-
- return room_init(name, key_bytes)
-}
-
-room_get_name :: proc(room: ^Room) -> string {
- bytes := small_array.slice(&room.name)
- return string(bytes)
-}
-
-room_get_id :: proc(room: ^Room) -> [sha3.DIGEST_SIZE_256]u8 {
- sha3_context: sha3.Context
- sha3.init_256(&sha3_context)
- sha3.update(&sha3_context, room.key[:])
-
- id: [sha3.DIGEST_SIZE_256]u8
- sha3.final(&sha3_context, id[:])
-
- return id
-}
-