Added thread safe packet handlers
This commit is contained in:
parent
cb4dd41358
commit
db3ee3a685
@ -15,9 +15,13 @@ func handle_packet(data: PackedByteArray):
|
|||||||
var player_id := buffer.get_string()
|
var player_id := buffer.get_string()
|
||||||
var player := Global.players.get_player(player_id)
|
var player := Global.players.get_player(player_id)
|
||||||
var message := buffer.get_utf8_string()
|
var message := buffer.get_utf8_string()
|
||||||
|
message = escape_bbcode(message)
|
||||||
|
|
||||||
Log.info("%s: %s" % [player.name, message])
|
Log.info("%s: %s" % [player.name, message])
|
||||||
message_received.emit("[color=#e0e0e0]%s:[/color] %s" % [player.name, escape_bbcode(message)])
|
emit.call_deferred(player.name, message)
|
||||||
|
|
||||||
|
func emit(player_name: String, message: String):
|
||||||
|
message_received.emit("[color=#e0e0e0]%s:[/color] %s" % [player_name, message])
|
||||||
|
|
||||||
func escape_bbcode(text: String) -> String:
|
func escape_bbcode(text: String) -> String:
|
||||||
return text.replace("[", "[lb]")
|
return text.replace("[", "[lb]")
|
||||||
|
@ -10,12 +10,18 @@ func handle_packet(data: PackedByteArray):
|
|||||||
var error := buffer.get_8()
|
var error := buffer.get_8()
|
||||||
if error != 0:
|
if error != 0:
|
||||||
Log.info("[%s] Login failed." % Global.account.name)
|
Log.info("[%s] Login failed." % Global.account.name)
|
||||||
failure.emit()
|
emit_failure.call_deferred()
|
||||||
return
|
return
|
||||||
|
|
||||||
Global.account.id = buffer.get_string()
|
Global.account.id = buffer.get_string()
|
||||||
Global.account.auth_token = buffer.get_string()
|
Global.account.auth_token = buffer.get_string()
|
||||||
|
|
||||||
|
emit_success.call_deferred()
|
||||||
|
|
||||||
|
func emit_failure():
|
||||||
|
failure.emit()
|
||||||
|
|
||||||
|
func emit_success():
|
||||||
success.emit()
|
success.emit()
|
||||||
|
|
||||||
func send_login():
|
func send_login():
|
||||||
|
@ -4,6 +4,9 @@ signal success
|
|||||||
|
|
||||||
func handle_packet(_data: PackedByteArray):
|
func handle_packet(_data: PackedByteArray):
|
||||||
logout()
|
logout()
|
||||||
|
emit.call_deferred()
|
||||||
|
|
||||||
|
func emit():
|
||||||
success.emit()
|
success.emit()
|
||||||
|
|
||||||
func logout():
|
func logout():
|
||||||
|
@ -9,7 +9,6 @@ var history: Array[float] = []
|
|||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
history.resize(HISTORY_SIZE)
|
history.resize(HISTORY_SIZE)
|
||||||
thread_safe = true
|
|
||||||
|
|
||||||
func handle_packet(data: PackedByteArray):
|
func handle_packet(data: PackedByteArray):
|
||||||
var id := data[0]
|
var id := data[0]
|
||||||
|
@ -21,7 +21,7 @@ func handle_packet(data: PackedByteArray):
|
|||||||
|
|
||||||
Log.info("Add player: %s %s @ %v" % [player_id, player_name, server_position])
|
Log.info("Add player: %s %s @ %v" % [player_id, player_name, server_position])
|
||||||
|
|
||||||
spawn_player(player_id, player_name, server_position)
|
spawn_player.call_deferred(player_id, player_name, server_position)
|
||||||
|
|
||||||
func spawn_player(id: String, nick: String, position: Vector3) -> Player:
|
func spawn_player(id: String, nick: String, position: Vector3) -> Player:
|
||||||
var player: Player
|
var player: Player
|
||||||
|
@ -18,7 +18,10 @@ func handle_packet(data: PackedByteArray):
|
|||||||
var player_id := data.get_string_from_ascii()
|
var player_id := data.get_string_from_ascii()
|
||||||
var player := Global.players.get_player(player_id)
|
var player := Global.players.get_player(player_id)
|
||||||
|
|
||||||
if !player:
|
if !player || !player.controller:
|
||||||
return
|
return
|
||||||
|
|
||||||
player.controller.jumped.emit()
|
emit.call_deferred(player.controller)
|
||||||
|
|
||||||
|
func emit(controller: Controller):
|
||||||
|
controller.jumped.emit()
|
||||||
|
@ -34,7 +34,10 @@ func handle_packet(data: PackedByteArray):
|
|||||||
|
|
||||||
controller.server_position.x = x
|
controller.server_position.x = x
|
||||||
controller.server_position.z = z
|
controller.server_position.z = z
|
||||||
controller.direction_changed.emit(Vector3(direction_x, 0, direction_z))
|
emit.call_deferred(controller, Vector3(direction_x, 0, direction_z))
|
||||||
|
|
||||||
|
func emit(controller: Controller, direction: Vector3):
|
||||||
|
controller.direction_changed.emit(direction)
|
||||||
|
|
||||||
func _process(_delta: float):
|
func _process(_delta: float):
|
||||||
if !Global.player:
|
if !Global.player:
|
||||||
|
@ -22,6 +22,12 @@ func handle_packet(data: PackedByteArray):
|
|||||||
var player_id_length := buffer.get_size() - 1
|
var player_id_length := buffer.get_size() - 1
|
||||||
var player_id := buffer.get_string(player_id_length)
|
var player_id := buffer.get_string(player_id_length)
|
||||||
var slot := buffer.get_u8()
|
var slot := buffer.get_u8()
|
||||||
|
|
||||||
var player := Global.players.get_player(player_id)
|
var player := Global.players.get_player(player_id)
|
||||||
player.controller.used_skill.emit(slot)
|
|
||||||
|
if !player || !player.controller:
|
||||||
|
return
|
||||||
|
|
||||||
|
emit.call_deferred(player.controller, slot)
|
||||||
|
|
||||||
|
func emit(controller: Controller, slot: int):
|
||||||
|
controller.used_skill.emit(slot)
|
||||||
|
@ -21,9 +21,5 @@ func handle_packet(packet: PackedByteArray):
|
|||||||
push_warning("Unknown packet type %d" % type)
|
push_warning("Unknown packet type %d" % type)
|
||||||
return
|
return
|
||||||
|
|
||||||
if handler.thread_safe:
|
handler.handle_packet(packet.slice(1))
|
||||||
handler.handle_packet(packet.slice(1))
|
|
||||||
else:
|
|
||||||
handler.handle_packet.call_deferred(packet.slice(1))
|
|
||||||
|
|
||||||
download += packet.size()
|
download += packet.size()
|
||||||
|
@ -16,7 +16,5 @@ enum Packet {
|
|||||||
|
|
||||||
@export var packet_type: Packet
|
@export var packet_type: Packet
|
||||||
|
|
||||||
var thread_safe: bool
|
|
||||||
|
|
||||||
func handle_packet(_data: PackedByteArray):
|
func handle_packet(_data: PackedByteArray):
|
||||||
pass
|
pass
|
@ -26,5 +26,8 @@ func on_text_submitted(message: String):
|
|||||||
text = ""
|
text = ""
|
||||||
release_focus()
|
release_focus()
|
||||||
|
|
||||||
|
if !message:
|
||||||
|
return
|
||||||
|
|
||||||
var chat := owner as Chat
|
var chat := owner as Chat
|
||||||
chat.message_submitted.emit(message)
|
chat.message_submitted.emit(message)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user