Ejemplo n.º 1
0
        /// <summary>
        /// 服务准备好了
        /// </summary>
        public void ServerReady(ServerInfo Server)
        {
            ConsoleEx.DebugLog(war.Side.ToString() + " Sub Received : Server is Ready ", ConsoleEx.YELLOW);
            //避免重复收听
            if (proxyReady == false)
            {
                proxyReady = true;
                monitor.ServerReady(Server);

                proxyServer = new ProxyServer(war, () => {
                    JoinInfo join = new JoinInfo()
                    {
                        ClientID   = DeviceInfo.GUID,
                        ClientName = "AW_Client",
                        Charactor  = war.Charactor,
                    };

                    string plainJoin = JSON.Instance.ToJSON(join);
                    proxyServer.Join(plainJoin);

                    if (war.warMo == WarMode.NativeWar)
                    {
                        RoomCharactor vir = war.Charactor.DeepCopy();
                        vir.camp          = WarCamp.SecondCamp;
                        vir.UID           = "-1";
                        vir.team          = new DebugModel().getTeam(WarCamp.SecondCamp);
                        ///
                        /// 创建虚拟Client
                        ///
                        JoinInfo virtualJoin = new JoinInfo()
                        {
                            ClientID   = "-1",
                            ClientName = "AWClient",
                            Charactor  = vir,
                        };
                        plainJoin = JSON.Instance.ToJSON(virtualJoin);
                        proxyServer.Join(plainJoin);
                    }
                });

                register();
            }             /*else {
                           *    //Test purpose
                           *    JoinInfo join = new JoinInfo() {
                           *            ClientID   = DeviceInfo.GUID,
                           *            ClientName = "AW_Client",
                           *            Charactor  = war.Charactor,
                           *    };
                           *
                           *    string plainJoin = JSON.Instance.ToJSON(join);
                           *    proxyServer.Join(plainJoin);
                           * }*/
        }
Ejemplo n.º 2
0
        public bool QuitJoin(JoinInfo joinin)
        {
            bool setOk = false;

            if (joinin != null)
            {
                VirtualClient client = null;
                setOk = ClientPool.TryGetValue(joinin.ClientID, out client);

                if (setOk)
                {
                    CharactorPool.QuitRoom(joinin.Charactor);

                    //申请写锁
                    readerWriterLock.EnterWriteLock();
                    ClientPool.Remove(joinin.ClientID);
                    //释放写锁
                    readerWriterLock.ExitWriteLock();

                    ConnectedClientCount -= 1;
                    if (client.curStatus.check(ClientStatus.Ready))
                    {
                        ReadyClientCount -= 1;
                    }
                    if (client.curStatus.check(ClientStatus.UIReady))
                    {
                        UIReadyClientCount -= 1;
                    }

                    //guard
                    if (ConnectedClientCount < 0)
                    {
                        ConnectedClientCount = 0;
                    }
                    if (ReadyClientCount < 0)
                    {
                        ReadyClientCount = 0;
                    }
                    if (UIReadyClientCount < 0)
                    {
                        UIReadyClientCount = 0;
                    }

                    AsyncClient();
                }
            }

            return(setOk);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 加入战斗
        /// </summary>
        /// <param name="ClientID">Client ID</param>
        public void Join(string ClientInfo)
        {
            JoinInfo join = JSON.Instance.ToObject <JoinInfo>(ClientInfo);

            ///加入监控
            monitor.AddJoin(join);
            processedMsg = new NetMQMessage();
            processedMsg.Append(WarMsgConsts.JOINRep);
            processedMsg.Append(join.ClientID);

            if (monitor.validateSyncClient)
            {
                proxyCli.SyncClient(monitor.getSyncMsg);
            }
        }
Ejemplo n.º 4
0
        public void AddJoin(JoinInfo joinin)
        {
            if (joinin != null)
            {
                if (ClientPool.ContainsKey(joinin.ClientID) == false)
                {
                    ConnectedClientCount += 1;
                    VirtualClient client = new VirtualClient(joinin);
                    CharactorPool.JoinRoom(joinin.Charactor);

                    //申请写锁
                    readerWriterLock.EnterWriteLock();
                    ClientPool.Add(joinin.ClientID, client);
                    //释放写锁
                    readerWriterLock.ExitWriteLock();

                    AsyncClient();
                }
            }
        }
Ejemplo n.º 5
0
        public void Quit(string ClientInfo)
        {
            JoinInfo join = JSON.Instance.ToObject <JoinInfo>(ClientInfo);

            processedMsg = new NetMQMessage();

            ///加入监控
            bool found = monitor.QuitJoin(join);

            if (found)
            {
                processedMsg.Append(WarMsgConsts.QuitRep);
            }
            else
            {
                processedMsg.Append(WarMsgConsts.QuitRepE);
            }

            if (monitor.validateSyncClient)
            {
                proxyCli.SyncClient(monitor.getSyncMsg);
            }
        }
Ejemplo n.º 6
0
 public VirtualClient(JoinInfo info)
 {
     ClientID  = info.ClientID;
     curStatus = curStatus.set(ClientStatus.Join);
     HeartTick = 0;
 }