private void RegisterGameServer(IRegisterGameServer request, IGameServerPeer peer, bool registerByRequet) { var key = GameServerContext.GetKey(request); if (log.IsInfoEnabled) { if (registerByRequet) { log.Info($"Registering GS by request. key:'{key}', id:'{request.ServerId}', p:{peer}"); } else { log.Info($"Registering GS by InitRequest. key:'{key}', id:'{request.ServerId}', p:{peer}"); } } lock (this.gameServerContexts) { ContextKeeper keeper; if (this.gameServerContexts.TryGetValue(key, out keeper)) { keeper.KillDisposeTimer(); if (keeper.Context.ServerId == request.ServerId) { if (log.IsInfoEnabled) { log.InfoFormat("Context for GS found and reused. key:'{0}', id:'{1}',p:{2}", key, request.ServerId, peer); } keeper.Context.AttachPeerAndHandleRegisterRequest(peer, request, true); return; } if (log.IsDebugEnabled) { log.DebugFormat("Context for GS found but belongs to other server." + " key:'{0}', old_id:'{1}',new_id:{2}", key, keeper.Context.ServerId, request.ServerId); } this.RemoveContext(keeper.Context); keeper.Context.DetachPeerAndClose(); } keeper = new ContextKeeper { Context = this.CreateContext(request), }; keeper.Context.AttachPeerAndHandleRegisterRequest(peer, request, false); this.gameServerContexts.Add(key, keeper); if (log.IsInfoEnabled) { log.InfoFormat("GS is added. key:'{0}', id:'{1}',p:{2}", key, request.ServerId, peer); } return; } }
public void ContextKeeperTest() { Console.WriteLine(@"ContextKeeperTest"); IContextKeeper keeper = new ContextKeeper(); Assert.IsFalse(keeper.ContainsContext("ContextName")); keeper.CreateNewContext("ContextName"); Assert.IsTrue(keeper.ContainsContext("ContextName")); }
public void ContextKeeperRemoveTest() { Console.WriteLine(@"ContextKeeperRemoveTest"); var keeper = new ContextKeeper(); Context context = keeper.CreateNewContext("ContextName"); Assert.AreEqual("ContextName", context.ContextName); Assert.IsTrue(keeper.ContainsContext("ContextName")); keeper.Remove("ContextName"); Assert.IsFalse(keeper.ContainsContext("ContextName")); }
public void ContextPropertiesTest() { Console.WriteLine(@"ContextPropertiesTest"); var keeper = new ContextKeeper(); Context context; using (context = new Context(keeper, "ContextName")) { Assert.AreEqual("ContextName", context.ContextName); Assert.AreEqual(keeper, context.ContextKeeper); } }
private void ScheduledDestroyContext(ContextKeeper contextKeeper) { lock (this.gameServerContexts) { if (contextKeeper.DisposeTimer != null) { this.RemoveContext(contextKeeper.Context, null); contextKeeper.Context.CloseContext(); contextKeeper.KillDisposeTimer(); } } }
public void ContextKeeperUsingTest() { Console.WriteLine(@"ContextKeeperUsingTest"); IContextKeeper keeper = new ContextKeeper(); using (keeper.CreateNewContext("ContextName")) { Assert.IsTrue(keeper.ContainsContext("ContextName")); keeper.CreateNewContext(ContextValue.DefineBinding); using (keeper.CreateNewContext("ContextName")) { Assert.IsTrue(keeper.ContainsContext("ContextName")); } Assert.IsTrue(keeper.ContainsContext("ContextName")); } keeper.CreateNewContext(ContextValue.OpenEditor); Assert.IsFalse(keeper.ContainsContext("ContextName")); }