Unverified Commit fe2763ac authored by Simon Esposito's avatar Simon Esposito Committed by GitHub
Browse files

Fix loading registered match handlers (#554)

parent a983570a
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -568,7 +568,7 @@ func NewRuntimeProviderJS(logger, startupLogger *zap.Logger, db *sql.DB, jsonpbM
	var tournamentResetFunction RuntimeTournamentResetFunction
	var leaderboardResetFunction RuntimeLeaderboardResetFunction

	callbacks, matchCallbacks, err := evalRuntimeModules(runtimeProviderJS, modCache, matchProvider, leaderboardScheduler, localCache, func(mode RuntimeExecutionMode, id string) {
	callbacks, matchHandlers, err := evalRuntimeModules(runtimeProviderJS, modCache, matchProvider, leaderboardScheduler, localCache, func(mode RuntimeExecutionMode, id string) {
		switch mode {
		case RuntimeExecutionModeRPC:
			rpcFunctions[id] = func(ctx context.Context, queryParams map[string][]string, userID, username string, vars map[string]string, expiry int64, sessionID, clientIP, clientPort, payload string) (string, error, codes.Code) {
@@ -1411,7 +1411,7 @@ func NewRuntimeProviderJS(logger, startupLogger *zap.Logger, db *sql.DB, jsonpbM

	matchProvider.RegisterCreateFn("javascript",
		func(ctx context.Context, logger *zap.Logger, id uuid.UUID, node string, stopped *atomic.Bool, name string) (RuntimeMatchCore, error) {
			mc := matchCallbacks.Get(name)
			mc := matchHandlers.Get(name)
			if mc == nil {
				return nil, nil
			}
@@ -1760,14 +1760,24 @@ func evalRuntimeModules(rp *RuntimeProviderJS, modCache *RuntimeJSModuleCache, m

	r := goja.New()

	// TODO: refactor and simplify modCache
	callbacks := &RuntimeJavascriptCallbacks{
		Rpc:    make(map[string]string),
		Before: make(map[string]string),
		After:  make(map[string]string),
	}

	matchHandlers := &RuntimeJavascriptMatchHandlers{
		mapping: make(map[string]*jsMatchHandlers, 0),
	}

	// TODO: refactor modCache
	if len(modCache.Names) == 0 {
		// There are no JS runtime modules to run.
		return nil, nil, nil
		return callbacks, matchHandlers, nil
	}
	modName := modCache.Names[0]

	initializer := NewRuntimeJavascriptInitModule(logger, modCache.Modules[modName].Ast, announceCallbackFn)
	initializer := NewRuntimeJavascriptInitModule(logger, modCache.Modules[modName].Ast, callbacks, matchHandlers, announceCallbackFn)
	initializerValue := r.ToValue(initializer.Constructor(r))
	initializerInst, err := r.New(initializerValue)
	if err != nil {
+6 −17
Original line number Diff line number Diff line
@@ -31,21 +31,21 @@ const INIT_MODULE_FN_NAME = "InitModule"
var inlinedFunctionError = errors.New("function literal found: javascript functions cannot be inlined")

type RuntimeJavascriptMatchHandlers struct {
	lock    *sync.RWMutex
	sync.RWMutex
	mapping map[string]*jsMatchHandlers
}

func (rmh *RuntimeJavascriptMatchHandlers) Add(name string, handlers *jsMatchHandlers) {
	rmh.lock.Lock()
	rmh.Lock()
	rmh.mapping[name] = handlers
	rmh.lock.Unlock()
	rmh.Unlock()
}

func (rmh *RuntimeJavascriptMatchHandlers) Get(name string) *jsMatchHandlers {
	var handlers *jsMatchHandlers
	rmh.lock.RLock()
	rmh.RLock()
	handlers = rmh.mapping[name]
	rmh.lock.RUnlock()
	rmh.RUnlock()

	return handlers
}
@@ -77,18 +77,7 @@ type RuntimeJavascriptInitModule struct {
	ast                *ast.Program
}

func NewRuntimeJavascriptInitModule(logger *zap.Logger, ast *ast.Program, announceCallbackFn func(RuntimeExecutionMode, string)) *RuntimeJavascriptInitModule {
	callbacks := &RuntimeJavascriptCallbacks{
		Rpc:    make(map[string]string),
		Before: make(map[string]string),
		After:  make(map[string]string),
	}

	matchCallbacks := &RuntimeJavascriptMatchHandlers{
		lock:    &sync.RWMutex{},
		mapping: make(map[string]*jsMatchHandlers, 0),
	}

func NewRuntimeJavascriptInitModule(logger *zap.Logger, ast *ast.Program, callbacks *RuntimeJavascriptCallbacks, matchCallbacks *RuntimeJavascriptMatchHandlers, announceCallbackFn func(RuntimeExecutionMode, string)) *RuntimeJavascriptInitModule {
	return &RuntimeJavascriptInitModule{
		Logger:             logger,
		announceCallbackFn: announceCallbackFn,