This repository has been archived on 2023-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
Joseph Manley 872f899f5f 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
2020-08-16 16:21:15 -04:00

74 lines
2.6 KiB
Go

package control
import (
"context"
"database/sql"
"github.com/heroiclabs/nakama-common/runtime"
)
type Match struct{}
type MatchState struct {
presences map[string]runtime.Presence
inputs map[string]string
positions map[string]string
jumps map[string]string
colors map[string]string
names map[string]string
}
func (m *Match) MatchInit(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, params map[string]interface{}) (interface{}, int, string) {
state := &MatchState{
presences: map[string]runtime.Presence{},
inputs: map[string]string{},
positions: map[string]string{},
jumps: map[string]string{},
colors: map[string]string{},
names: map[string]string{},
}
tickRate := 10
label := "{\"name\": \"Game World\"}"
return state, tickRate, label
}
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, false, "User already logged in."
} else {
return mState, true, ""
}
}
func (m *Match) MatchJoin(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, presences []runtime.Presence) interface{} {
mState, _ := state.(*MatchState)
for _, precense := range presences {
mState.presences[precense.GetUserId()] = precense
}
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{} {
mState, _ := state.(*MatchState)
for _, presence := range presences {
delete(mState.presences, presence.GetUserId())
}
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{} {
// Custom code to:
// - Process the messages received.
// - Update the match state based on the messages and time elapsed.
// - Broadcast new data messages to match participants.
return state
}
func (m *Match) MatchTerminate(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, dispatcher runtime.MatchDispatcher, tick int64, state interface{}, graceSeconds int) interface{} {
return state
}