Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        public void ContextKeeperTest()
        {
            Console.WriteLine(@"ContextKeeperTest");
            IContextKeeper keeper = new ContextKeeper();

            Assert.IsFalse(keeper.ContainsContext("ContextName"));
            keeper.CreateNewContext("ContextName");
            Assert.IsTrue(keeper.ContainsContext("ContextName"));
        }
Ejemplo n.º 3
0
        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"));
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        private void ScheduledDestroyContext(ContextKeeper contextKeeper)
        {
            lock (this.gameServerContexts)
            {
                if (contextKeeper.DisposeTimer != null)
                {
                    this.RemoveContext(contextKeeper.Context, null);

                    contextKeeper.Context.CloseContext();

                    contextKeeper.KillDisposeTimer();
                }
            }
        }
Ejemplo n.º 6
0
        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"));
        }