From 872f899f5ffd654bad9dcc20517bbfca60f0291b Mon Sep 17 00:00:00 2001 From: Joseph Manley Date: Sun, 16 Aug 2020 14:28:41 -0400 Subject: [PATCH] Return updated state object Return error when player exists in dictionary Modifications to list call Debug RPC method Debug RPC method -S Include client changes --- client/.gitignore | 1 + client/scripts/singletons/ServerConnection.gd | 16 ++++- server/plugin/control/control.go | 8 +-- server/plugin/rpc/rpc.go | 62 ++++++++++--------- 4 files changed, 51 insertions(+), 36 deletions(-) create mode 100644 client/.gitignore diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..ec2a80e --- /dev/null +++ b/client/.gitignore @@ -0,0 +1 @@ +builds \ No newline at end of file diff --git a/client/scripts/singletons/ServerConnection.gd b/client/scripts/singletons/ServerConnection.gd index fe4da27..7902e18 100644 --- a/client/scripts/singletons/ServerConnection.gd +++ b/client/scripts/singletons/ServerConnection.gd @@ -6,6 +6,7 @@ const SERVER_ENDPOINT := "nakama.cloudsumu.com" var _session : NakamaSession var _client : NakamaClient = Nakama.create_client(KEY, SERVER_ENDPOINT, 7350, "http") var _socket : NakamaSocket +var _precenses : Dictionary = {} func authenticate_async(email : String, password : String) -> NakamaException: var result : NakamaException = null @@ -44,9 +45,18 @@ func join_world_async() -> Dictionary: if world.is_exception(): print("Join world error occured: %s" % world.exception.message) return {} - var _world_id : String = world.payload - print(_world_id) - return {} + + var match_join_result : NakamaRTAPI.Match = yield(_socket.join_match_async(world.payload), "completed") + if match_join_result.is_exception(): + print("Join match error: %s - %s" % [match_join_result.exception.status_code, match_join_result.exception.message]) + return {} + + for precense in match_join_result.presences: + _precenses[precense.user_id] = precense + + print("Currently connected: %s" % _precenses.size()) + + return _precenses func _on_socket_closed(): _socket = null diff --git a/server/plugin/control/control.go b/server/plugin/control/control.go index 6aeb31e..cd6dc87 100644 --- a/server/plugin/control/control.go +++ b/server/plugin/control/control.go @@ -36,9 +36,9 @@ func (m *Match) MatchInit(ctx context.Context, logger runtime.Logger, db *sql.DB func (m *Match) MatchJoinAttempt(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, presence runtime.Presence, metadata map[string]string) (interface{}, bool, string) { mState, _ := state.(*MatchState) if _, ok := mState.presences[presence.GetUserId()]; ok { - return mState, true, "" - } else { return mState, false, "User already logged in." + } else { + return mState, true, "" } } @@ -48,7 +48,7 @@ func (m *Match) MatchJoin(ctx context.Context, logger runtime.Logger, db *sql.DB for _, precense := range presences { mState.presences[precense.GetUserId()] = precense } - return state + return mState } func (m *Match) MatchLeave(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, presences []runtime.Presence) interface{} { @@ -56,7 +56,7 @@ func (m *Match) MatchLeave(ctx context.Context, logger runtime.Logger, db *sql.D for _, presence := range presences { delete(mState.presences, presence.GetUserId()) } - return state + return mState } func (m *Match) MatchLoop(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, messages []runtime.MatchData) interface{} { diff --git a/server/plugin/rpc/rpc.go b/server/plugin/rpc/rpc.go index c4c42eb..8635a53 100644 --- a/server/plugin/rpc/rpc.go +++ b/server/plugin/rpc/rpc.go @@ -11,37 +11,41 @@ func getFirstWorld(ctx context.Context, logger runtime.Logger, nk runtime.Nakama // List existing matches // that have been 1 & 4 players minSize := 1 - maxSize := 4 - matches, listErr := nk.MatchList(ctx, 1, false, "", &minSize, &maxSize, "") //local matches = nakama.match_list() - - // Return if listing error - if listErr != nil { - logger.Printf("Failed to list matches when grabing first world! Error: %v\n", listErr) - return "", listErr - } - - // If no matches exist, create one - if len(matches) <= 0 { - - // Create match - //params := map[string]interface{}{} - matchID, createErr := nk.MatchCreate(ctx, "control", map[string]interface{}{}) - //return nakama.match_create("world_control", {}) - - // Return if creation error - if createErr != nil { - logger.Printf("Failed to create match when grabing first world! Error: %v\n", createErr) - return "", createErr - } - logger.Info("Successfully created new match!") - - // Return newly created match - return matchID, nil - + maxSize := 31 + //5, false, "", &minSize, &maxSize, "" + if matches, err := nk.MatchList(ctx, 1, true, "", &minSize, &maxSize, ""); err != nil { + logger.Printf("Failed to list matches when grabing first world! Error: %v\n", err) + return "", err } else { - // Return first found match - return matches[0].GetMatchId(), nil + //For debug purposes + for _, match := range matches { + logger.Info("Found match with id: %s", match.GetMatchId()) + } + + // If no matches exist, create one + if len(matches) <= 0 { + + // Create match + //params := map[string]interface{}{} + matchID, createErr := nk.MatchCreate(ctx, "control", map[string]interface{}{}) + //return nakama.match_create("world_control", {}) + + // Return if creation error + if createErr != nil { + logger.Printf("Failed to create match when grabing first world! Error: %v\n", createErr) + return "", createErr + } + logger.Info("Successfully created new match!") + + // Return newly created match + return matchID, nil + + } else { + + // Return first found match + return matches[0].GetMatchId(), nil + } } }