47 lines
1.1 KiB
GDScript
47 lines
1.1 KiB
GDScript
@tool
|
|
extends AbstractRoomRepo
|
|
class_name RoomRepoHTTP
|
|
|
|
const BASE_URL = "http://89.223.87.146:5004"
|
|
|
|
signal rooms_loaded(rooms: Array[RoomEntity])
|
|
signal request_failed(error_message: String)
|
|
|
|
const ROOM_ENDPOINT = "/room/"
|
|
|
|
var _http_client := HTTPTalkpalClient.new(BASE_URL)
|
|
|
|
func _init():
|
|
add_child(_http_client)
|
|
_http_client.request_failed.connect(_on_request_failed)
|
|
|
|
func list_rooms() -> Array[RoomEntity]:
|
|
var result = await _http_client.request(ROOM_ENDPOINT, HTTPClient.METHOD_GET)
|
|
if result is Array:
|
|
var rooms = _parse_room_list(result)
|
|
return rooms
|
|
else:
|
|
emit_signal("request_failed", "Failed to load rooms")
|
|
return []
|
|
|
|
func get_room(id: String) -> RoomEntity:
|
|
var rooms = await list_rooms()
|
|
|
|
for room in rooms:
|
|
if room.id == id:
|
|
return room
|
|
|
|
return null
|
|
|
|
func _parse_room_list(data: Array) -> Array[RoomEntity]:
|
|
var rooms: Array[RoomEntity] = []
|
|
for item in data:
|
|
var room = RoomEntity.new()
|
|
room.id = item.get("id")
|
|
room.title = item.get("title")
|
|
rooms.append(room)
|
|
return rooms
|
|
|
|
func _on_request_failed(error_message: String):
|
|
emit_signal("request_failed", error_message)
|