public async Task Invoke(HttpContext context, IGameEngineEventHandler handler) { if (context.Request.Path.Value.StartsWith(_options.CallbackEnpoint)) { string apiKey = context.Request.Headers["x-api-key"].FirstOrDefault(); if (apiKey != _options.GameEngineKey) { context.Response.StatusCode = 401; context.Response.Headers.Add("WWW-Authentication", "x-api-key"); return; } using (StreamReader sr = new StreamReader(context.Request.Body)) using (JsonReader jr = new JsonTextReader(sr)) { var serializer = new JsonSerializer(); try { string ev = context.Request.Path.Value.Split('/').Last(); switch (ev) { case "updated": var problemState = serializer.Deserialize <ProblemState>(jr); await handler.Update(problemState); break; case "graded": var gradedFlag = serializer.Deserialize <GradedSubmission>(jr); await handler.Update(gradedFlag); break; case "reload": await handler.Reload(); break; } } catch (Exception ex) { _logger.LogError(ex, "Erroring processing GameEngine callback message."); } } } else { await _next(context); } }
public ProxyMock( IMemoryCache cache, IHostingEnvironment env, Options options, IGameEngineEventHandler handler, //IGameDataCache dataCache, ILogger <ProxyMock> logger ) { Cache = cache; Env = env; Options = options; Handler = handler; Logger = logger; //DataCache = dataCache; }
public GameEngine(IGameEngineEventHandler gameEngineEventHandler) { _gameEngineEventHandler = gameEngineEventHandler; }