Godot Version
v4.6.2
Question
I'm having some trouble getting the peer_connected symbol to emit. I'll share my code below:
extends Node
@onready var socket : NakamaSocket
@onready var session : NakamaSession
@onready var Players
var nakama_client : NakamaClient
var nakama_bridge : NakamaMultiplayerBridge
signal socket_ready(socket: NakamaSocket)
var email
var password
var p_scene = preload("res://Scenes/Player.tscn")
func generate_id() -> String:
return "%x-%x-%x" % [
Time.get_ticks_usec(),
randi(),
randi()
]
func _ready() -> void :
var id = generate_id()
var email = OS.get_cmdline_args()[2].replace("--email=", "")
var password = OS.get_cmdline_args()[3].replace("--password=", "")
if(!is_multiplayer_authority()) : return
nakama_client = Nakama.create_client("defaultkey", "192.168.0.98", 7350, "http")
nakama_client.timeout = 10
#FIXME : Hardwired ID
socket = Nakama.create_socket_from(nakama_client)
session = await nakama_client.authenticate_email_async(email, password)
var connected : NakamaAsyncResult = await socket.connect_async(session)
if connected.is_exception():
GlobalLogger.enqueue(self.name, GlobalLogger.Error_Level.FATAL, "Failed to connect to socket.")
return
else:
print("Socket connected.")
socket_ready.emit(socket)
socket.connected.connect(on_socket_connected)
socket.closed.connect(on_socket_closed)
socket.received_error.connect(on_socket_error)
socket.received_match_presence.connect(on_match_prescence)
socket.received_match_state.connect(on_match_state)
setup_multiplayer_bridge()
func on_match_prescence(presence: NakamaRTAPI.MatchPresenceEvent):
#print(presence)
pass
func on_match_state(state: NakamaRTAPI.MatchData):
#print(state)
pass
func on_match_join() -> void:
print("Joined match: " )
func on_match_join_error(error) -> void:
print("Unable to join match + " + error)
func on_socket_connected():
print("Socket connected")
socket_ready.emit(socket)
func on_socket_closed():
print("Socket Disconnected")
func on_socket_error(err):
pass
print("Socket Error: " + str(err))
func on_peer_connected(id: int) -> void:
print("Peer connected with id: " + str(1))
#if(!Players.has(id)):
#Players[id] = {
#"name" : id
#}
#if(!Players.has(multiplayer.get_unique_id())):
#Players[multiplayer.get_unique_id()] = {
#"name" : multiplayer.get_unique_id()
#}
#
#if(multiplayer.is_server()):
#rpc("spawn_peer", id)
func on_peer_disconnected(id) -> void:
print("Peer disconnected with id: " + id)
func update_user_info(username, displayname, avatarurl, language = "en", location="us", timezone="est") -> void:
await nakama_client.update_account_async(session, username, displayname, avatarurl, language, location, timezone)
func setup_multiplayer_bridge () -> void :
nakama_bridge = NakamaMultiplayerBridge.new(socket)
nakama_bridge.match_join_error.connect(on_match_join_error)
nakama_bridge.match_joined.connect(on_match_join)
var multiplayer = get_tree().get_multiplayer()
get_tree().get_multiplayer().set_multiplayer_peer(nakama_bridge.multiplayer_peer)
get_tree().get_multiplayer().peer_connected.connect(on_peer_connected, 1)
get_tree().get_multiplayer().peer_disconnected.connect(on_peer_disconnected, 1)
func _on_host_button_button_down() -> void:
nakama_bridge.join_named_match("Test")
#spawn_peer(multiplayer.get_unique_id())
Not quite ready for spawning yet. The first two signals connected to the nakama bridge do fire, and I can confirm the match is being connected to. These signal never fire no matter how I play with them, obviously no client is being made aware a peer connected. Why, if it clearly seems that one has?
get_tree().get_multiplayer().set_multiplayer_peer(nakama_bridge.multiplayer_peer)
get_tree().get_multiplayer().peer_connected.connect(on_peer_connected, 1)
get_tree().get_multiplayer().peer_disconnected.connect(on_peer_disconnected, 1)
=== Nakama : DEBUG === Freeing request 1
=== Nakama : DEBUG === Connecting to host: ws://192.168.0.98:7350/ws?lang=en&status=false&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOiJhZGU0NTE4MS1jZDM0LTQ1YWUtYjc3NC0zNTI4YzFlYTg2YmYiLCJ1aWQiOiI2NTFjZjI2ZC1lMDMxLTQ4MjUtYjJkZi1iMmJlYTQyYjFkZGYiLCJ1c24iOiJNb29FY3pRa3NHIiwiZXhwIjoxNzgzNDU4NjM1LCJpYXQiOjE3ODM0NTE0MzV9.qMTY7cJypeqRytEBISio-UCqjDv9lCmj-1-9l_zCZXM
=== Nakama : INFO === Connected!
Socket connected.
=== Nakama : DEBUG === Sending async request: MatchCreate<name=Test>
=== Nakama : DEBUG === Resuming request: 1: { "cid": "1", "match": { "match_id": "c0400ee6-bc6e-583e-a1b5-67e698524de0.", "size": 1.0, "self": { "user_id": "b24a9379-50a2-43e4-80e0-edb27e1ef939", "session_id": "88a2af36-7a37-11f1-b8e8-7106fdcb5b46", "username": "QGOSuwetRm" } } }
Joined match:
Any thoughts would be greatly appreciated. I’ve had to basically re-work my entire codebase to get it cooperating with Nakama and it still refuses, ugh! Thanks!!
Regards,
AN