Пример #1
0
    void Update()
    {
        //发送心跳包
        var nowTime = (uint)(DateTime.Now - startTime).TotalSeconds; // 相差秒数

        if (heartTimeFlag == 0 && nowTime >= lastHeartTime + 2)
        {
            Debug.Log(rand.Next(10, 500));
            Debug.Log(rand.Next(10, 500));
            lastHeartTime = nowTime;
            heartTimeFlag = nowTime;
            NetSender.Send <ProtoProtocol.heartbeat>(null, (info) =>
            {
                heartTimeFlag = 0;
                //var rsp = info as ProtoSprotoType.heartbeat.response;
                //Debug.Log(rsp.status);
            });
        }
        //正常情况  没有收到心跳包的回包 开启重连
        if (loginStatus && heartTimeFlag != 0 && nowTime >= heartTimeFlag + 2)
        {
            heartTimeFlag = 0;
            OnClickLogin(null, null);
        }
    }
Пример #2
0
    //send find match msg to server
    public void FindRoom()
    {
        Debug.Log("FindRoom called");

        MultiGameState    = GameState.Game_Match;
        TheUserMatchState = UserMatchState.FindRoom;

        SprotoType.matchMsg.request req = new SprotoType.matchMsg.request();
        req.matchMsgType = (int)MatchMsgType.Match_FindRoom;
        //mChen
        //switch (GameManager.TheGameMode)
        //{
        //    case GameMode.MultiGame_1v1:
        //        req.matchInfo = ((int)MatchType.Normal_1v1).ToString();
        //        break;
        //    case GameMode.MultiGame_2v2:
        //        req.matchInfo = ((int)MatchType.Normal_2v2).ToString();
        //        break;
        //    case GameMode.MultiGame_3v3:
        //        req.matchInfo = ((int)MatchType.Normal_3v3).ToString();
        //        break;
        //}
        req.matchInfo = ((int)MatchType.Normal_1v1).ToString();

        NetSender.Send <Protocol.matchMsg>(req);
    }
Пример #3
0
    /**
     * 发送登录协议
     **/
    private void OnClickLogin(GameObject go, PointerEventData ed)
    {
        loginStatus = true;
        string host = "192.168.87.36";
        int    port = 9777;

        NetCore.Connect(host, port, () => NetCore.Receive());
        _txtTips.text = "login ..";
        NetSender.Send <ProtoProtocol.travelerLogin>(null, (info) =>
        {
            var res = info as ProtoSprotoType.travelerLogin.response;
            NetCore.Connect(res.ip, (int)res.port, () => NetCore.Receive());

            var sendInfo     = new ProtoSprotoType.login.request();
            sendInfo.session = res.session;
            sendInfo.token   = res.token;
            NetSender.Send <ProtoProtocol.login>(sendInfo, (loginInfo) => {
                var loginResInfo = loginInfo as ProtoSprotoType.login.response;
                Debug.Log(loginResInfo.status);
                if (!loginResInfo.status)
                {
                    //账号密码错误
                    loginStatus = false;
                }
            });
        });
    }
Пример #4
0
 private void txtToSend_KeyDown(object sender, KeyEventArgs e)
 {
     if (_sender.IsConnected)
     {
         if (e.KeyCode == Keys.Escape)
         {
             char esc  = (char)27;
             bool sent = _sender.Send(esc.ToString()); // Esc
             if (!sent)
             {
                 lblConnected.Text      = "Not Connected";
                 lblConnected.ForeColor = Color.Red;
             }
             e.Handled = true;
         }
     }
 }
Пример #5
0
 void Auth(byte[] etokens)
 {
     Debug.Log(etokens.ToString());
     // 账号密码服务器验证
     auth.request req = new auth.request();
     req.etokens = Convert.ToBase64String(etokens);
     NetSender.Send <ClientProtocol.auth>(req);
 }
Пример #6
0
 void MapReady()
 {
     NetSender.Send <ClientProtocol.mapready>(null, (_) =>
     {
         mapready.response rsp = _ as mapready.response;
         Debug.Log("进入地图结果:" + rsp.ok);
     });
 }
Пример #7
0
    public void TryToJoinMatch()
    {
        Debug.Log("TryToJoinMatch called");
        //TheUserMatchState = UserMatchState.JoinedRoom;

        SprotoType.matchMsg.request req = new SprotoType.matchMsg.request();
        req.matchMsgType = (int)MatchMsgType.Match_TryToJoinMatch;
        NetSender.Send <Protocol.matchMsg>(req);
    }
Пример #8
0
    //reset gameState
    public void Reset()
    {
        if (GameManager.s_gameSingleMultiType == GameSingleMultiType.MultiGame_Skynet)
        {
            //NetCore.Reset();
            MultiGameState = GameState.Game_NullState;

            //SprotoType.quit.request req = new SprotoType.quit.request();
            NetSender.Send <Protocol.quit>(null);
        }
    }
Пример #9
0
 public void EnterGame()
 {
     characterpick.request req = new characterpick.request();
     req.uuid = PlayerInfo.Instance.UUID;
     NetSender.Send <ClientProtocol.characterpick>(req, (_) =>
     {
         characterpick.response rsp = _ as characterpick.response;
         Debug.Log("选择角色结果:" + rsp.ok);
         LoadScene();
     });
     Debug.Log("选择角色唯一ID:" + PlayerInfo.Instance.UUID);
 }
Пример #10
0
 void Challenge(byte[] hmac)
 {
     // 验证密钥
     challenge.request req = new challenge.request();
     req.hmac = Convert.ToBase64String(hmac);
     NetSender.Send <ClientProtocol.challenge>(req, (_) =>
     {
         challenge.response rsp = _ as challenge.response;
         Debug.Log(rsp.result);
         string temp   = EncodeToken();
         byte[] etoken = desencode(PlayerInfo.Instance.Secret, Encoding.UTF8.GetBytes(temp));
         Auth(etoken);
     });
 }
Пример #11
0
    public void LeaveMatchToRoom()
    {
        Debug.Log("LeaveMatchToRoom called");

        if (TheUserMatchState == UserMatchState.PlayingMatch || TheUserMatchState == UserMatchState.WaitToJoinNextMatch)
        {
            MultiGameState    = GameState.Game_Match;
            TheUserMatchState = UserMatchState.JoinedRoom;

            SprotoType.matchMsg.request req = new SprotoType.matchMsg.request();
            req.matchMsgType = (int)MatchMsgType.Match_LeaveMatchToRoom;
            NetSender.Send <Protocol.matchMsg>(req);
        }
    }
    public void CreateCharacter()
    {
        charactercreate.request req = new charactercreate.request();
        req.name = CharacterNameInputField.text;
        req.job  = job;
        req.sex  = sex;
        NetSender.Send <ClientProtocol.charactercreate>(req, (_) =>
        {
            Debug.Log("创建角色返回");
            Login.Instance.GetCharacterList();
        });

        Debug.Log("创建角色 名称:" + CharacterNameInputField.text + " 职业:" + job + " 性别:" + sex);
    }
Пример #13
0
    public void handleInput()
    {
        OptStruct optVer = new OptStruct {
            type = OptType.None
        }, optHor = new OptStruct {
            type = OptType.None
        };

        if (InputManager.instance.isKeyPress(KeyCode.W))
        {
            optVer.type  = OptType.MoveVer;
            optVer.value = 1;
        }
        else if (InputManager.instance.isKeyPress(KeyCode.S))
        {
            optVer.type  = OptType.MoveVer;
            optVer.value = -1;
        }


        if (InputManager.instance.isKeyPress(KeyCode.A))
        {
            optHor.type  = OptType.MoveHor;
            optHor.value = -1;
        }
        else if (InputManager.instance.isKeyPress(KeyCode.D))
        {
            optHor.type  = OptType.MoveHor;
            optHor.value = 1;
        }

        if (optVer.type != OptType.None)
        {
            SprotoType.playopt.request opt = new SprotoType.playopt.request();
            opt.optUnit = new SprotoType.optUnit {
                type = (int)optVer.type, param = optVer.value
            };
            NetSender.Send <Protocol.playopt>(opt, OnRecvOpt);
        }

        if (optHor.type != OptType.None)
        {
            SprotoType.playopt.request opt = new SprotoType.playopt.request();
            opt.optUnit = new SprotoType.optUnit {
                type = (int)optHor.type, param = optHor.value
            };
            NetSender.Send <Protocol.playopt>(opt, OnRecvOpt);
        }
    }
Пример #14
0
 void MoveTo()
 {
     if (lastPosition != gameObj.transform.position)
     {
         lastPosition = gameObj.transform.position;
         moveto.request req = new moveto.request();
         req.pos   = new character_pos();
         req.pos.x = Convert.ToInt32(gameObj.transform.position.x) * 10;
         req.pos.y = Convert.ToInt32(gameObj.transform.position.y) * 10;
         req.pos.z = Convert.ToInt32(gameObj.transform.position.z) * 10;
         NetSender.Send <ClientProtocol.moveto>(req, (_) =>
         {
         });
     }
 }
Пример #15
0
 public void Handshake()
 {
     // 生成私钥
     clientkey = randomkey();
     handshake.request req = new handshake.request();
     // 发送公钥
     req.clientkey = Convert.ToBase64String(dhexchange(clientkey));
     NetSender.Send <ClientProtocol.handshake>(req, (_) =>
     {
         // 返回消息
         handshake.response rsp = _ as handshake.response;
         serverkey = Convert.FromBase64String(rsp.serverkey);
         PlayerInfo.Instance.Challenge = Convert.FromBase64String(rsp.challenge);
         PlayerInfo.Instance.Secret    = dhsecret(serverkey, clientkey);
         Challenge(hmac64(PlayerInfo.Instance.Challenge, PlayerInfo.Instance.Secret));
     });
 }
Пример #16
0
        public void NetSender_Send_TestMethodAttribute()
        {
            var settings = new ConfigurationSettings();
            var sender   = new NetSender(settings);

            var hash     = HashFunction.Get("SecretWord");
            var userName = SystemInfo.GetCurrentUserDomainName();

            var photoImg = Image.FromFile("TestImages\\goodPhotoTest.jpg");
            var scanImg  = Image.FromFile("TestImages\\scanTest.jpg");

            var dataPreview = new ArmDataPackage()
            {
                Type          = ArmDataPackageType.Preview,
                IIN           = 13543543L,
                Timestamp     = DateTime.Now,
                Comment       = "test",
                Token         = hash,
                UserName      = userName,
                WFMId         = 56789L,
                CameraPicture = photoImg.ToBase64(),
                ScanPicture   = scanImg.ToBase64()
            };

            var dataFull = new ArmDataPackage()
            {
                Type          = ArmDataPackageType.FullFrame,
                IIN           = 13543543L,
                Timestamp     = DateTime.Now,
                Comment       = "test",
                Token         = hash,
                UserName      = userName,
                WFMId         = 56789L,
                CameraPicture = photoImg.ToBase64(),
                ScanPicture   = scanImg.ToBase64()
            };

            var packets = new List <ArmDataPackage>();

            packets.Add(dataFull);
            packets.Add(dataPreview);

            sender.Send(packets);
        }
Пример #17
0
        public void TestMethod1()
        {
            //string Path = "";
            var           TimeStamp        = DateTime.Now;
            List <string> FilesToSend      = null;
            List <string> JpgFilesToDelete = null;

            SetJpgFileLists(out FilesToSend, out JpgFilesToDelete);

            var tempFolder = Path.Combine(Path.GetTempPath(), "ArchivesForPackages");

            Directory.CreateDirectory(tempFolder);
            foreach (var item in FilesToSend)
            {
                if (File.Exists(item))
                {
                    FileHelper.CreateZip(item, Path.Combine(tempFolder, Path.GetFileNameWithoutExtension(item) + ".zip"));
                }
            }
            DirectoryInfo     DI            = new DirectoryInfo(tempFolder);
            var               ZipCollection = DI.GetFiles("*.zip");
            List <LogPackage> packets       = new List <LogPackage>();

            foreach (var item in ZipCollection)
            {
                var paket = CreateLogPacket(item.Name, item.FullName, TimeStamp);
                //paket.FileName = "some string";
                packets.Add(paket);
                try
                {
                    var json = Newtonsoft.Json.JsonConvert.SerializeObject(paket);
                }
                catch (Exception ex)
                {
                }
            }

            //ChangeWebCamFullImage(ii.FullImage);
            var config = new CommonLib.ConfigurationSettings();

            var netSender = new NetSender(config);

            var sendedResult = netSender.Send(packets);
        }
Пример #18
0
 public void GetCharacterList()
 {
     // 请求角色列表
     NetSender.Send <ClientProtocol.getcharacterlist>(null, (_) =>
     {
         getcharacterlist.response rsp     = _ as getcharacterlist.response;
         PlayerInfo.Instance.CharacterList = rsp.character;
         Debug.Log("玩家角色数量:" + PlayerInfo.Instance.CharacterList.Count);
         if (PlayerInfo.Instance.CharacterList.Count == 0)
         {
             // 创建角色
             LoadCreateCharacterScene();
         }
         else
         {
             // 选择角色
             LoadPickCharacterScene();
         }
     });
 }
Пример #19
0
    //send and receive heart beat msg thread function
    public void SendHeartBeatMsg()
    {
        CheckConnectVar = true;
        while (NetCore.bConnected)
        {
            Debug.Log("heart beat send");

            Loom.QueueOnMainThread(() =>
            {
                Human localHuman                 = GameObjectsManager.GetInstance().GetLocalHuman();
                Vector3 localPlayerPos           = localHuman.transform.position;
                Vector3 eulerAngles              = localHuman.transform.eulerAngles;
                SprotoType.heartbeat.request req = new heartbeat.request
                {
                    posX = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.x), 0),
                    posY = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.y), 0),
                    posZ = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.z), 0),

                    angleX = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.x), 0),
                    angleY = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.y), 0),
                    angleZ = BitConverter.ToInt64(BitConverter.GetBytes((double)eulerAngles.z), 0)
                };
                //req.playerPosMsg = new SprotoType.PlayerPosMsg();
                //req.playerPosMsg.playerIndex = (int)-1;
                //req.playerPosMsg.posX = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.x), 0);
                //req.playerPosMsg.posY = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.y), 0);
                //req.playerPosMsg.posZ = BitConverter.ToInt64(BitConverter.GetBytes((double)localPlayerPos.z), 0);

                NetSender.Send <Protocol.heartbeat>(req, (_) =>
                {
                    CheckConnectVar = true;
                });
            });

            Thread.Sleep(5000);//5s
        }
        Debug.Log("SendHeartBeatMsg thread exit");
    }
Пример #20
0
    void QueryLogin()
    {
        //请求登陆gameserver
        string handshake = string.Format("{0}@{1}#{2}:{3}",
                                         Utilities.ToBase64String(PlayerInfo.Instance.Account),
                                         Utilities.ToBase64String(PlayerInfo.Instance.Server),
                                         Utilities.ToBase64String(PlayerInfo.Instance.Subid), PlayerInfo.Instance.Index);

        byte[]        hmac = hmac64(hashkey(Encoding.UTF8.GetBytes(handshake)), PlayerInfo.Instance.Secret);
        login.request req  = new login.request();
        req.handshake = handshake + ":" + Convert.ToBase64String(hmac);
        NetSender.Send <ClientProtocol.login>(req, (_) =>
        {
            login.response rsp = _ as login.response;
            Debug.Log(rsp.result);
            int code = Convert.ToInt32(rsp.result.Substring(0, 3));
            if (code == 200)
            {
                Debug.Log("游戏服务器认证成功!");
                GetCharacterList();
            }
        });
    }
Пример #21
0
    private void SetupNetReceiverHandler()
    {
        NetReceiver.AddHandler <Protocol.handshake>((_) =>
        {
            Debug.Log("handshake");
            SprotoType.handshake.request req = _ as handshake.request;
            switch (TheUserLoginState)
            {
            case UserLoginState.LoginStart:
                {
                    //Debug.Log("challenge receive ");
                    _challengeStr = Convert.FromBase64String(req.msg);

                    DH64 dhforKey = new DH64();
                    dhforKey.KeyPair(out _privateKey, out _publicKey);
                    SprotoType.handshake.request clientkey = new handshake.request();

                    clientkey.msg = Convert.ToBase64String(BitConverter.GetBytes(_publicKey));

                    clientkey.socketfd = req.socketfd;
                    NetSender.Send <Protocol.handshake>(clientkey);

                    Debug.Log("challengeStr" + _challengeStr + " ori " + req.msg + " fd " + clientkey.socketfd);
                    TheUserLoginState = UserLoginState.LoginPublicServerKey;
                }
                break;

            case UserLoginState.LoginPublicServerKey:
                {
                    //string serverKey = System.Text.Encoding.Default.GetString(Convert.FromBase64String(req.msg));
                    byte[] ServerKey = Convert.FromBase64String(req.msg);

                    ulong serverKey = BitConverter.ToUInt64(ServerKey, 0);
                    _secretKey      = DH64.Secret(_privateKey, serverKey);
                    SprotoType.handshake.request challengeMsg = new handshake.request();

                    challengeMsg.msg =
                        Convert.ToBase64String(
                            BitConverter.GetBytes(
                                HMac64.hmac(
                                    BitConverter.ToUInt64(_challengeStr, 0),
                                    _secretKey)));

                    challengeMsg.socketfd = req.socketfd;
                    NetSender.Send <Protocol.handshake>(challengeMsg);
                    TheUserLoginState = UserLoginState.LoginCheckSecret;
                }
                break;

            case UserLoginState.LoginCheckSecret:
                {
                    if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeSuccess)) == req.msg)
                    {
                        if (UserName != string.Empty)
                        {
                            Debug.Log("login " + UserName);
                            string token = string.Format("{0}:{1}",
                                                         Convert.ToBase64String(Encoding.UTF8.GetBytes(UserName)),
                                                         Convert.ToBase64String(Encoding.UTF8.GetBytes(PassWord)));

                            SprotoType.handshake.request tokenMsg = new handshake.request
                            {
                                msg      = DesCrypt.desencode(_secretKey, token),
                                socketfd = req.socketfd
                            };

                            NetSender.Send <Protocol.handshake>(tokenMsg);

                            TheUserLoginState = UserLoginState.LoginCheckTokenResult;
                        }
                        else
                        {
                            Debug.Log("register");
                            DisplayName  = RandomName.GetRandomName();
                            string token = Convert.ToBase64String(Encoding.UTF8.GetBytes(DisplayName));
                            SprotoType.handshake.request tokenMsg = new handshake.request
                            {
                                msg      = DesCrypt.desencode(_secretKey, token),
                                socketfd = req.socketfd
                            };

                            NetSender.Send <Protocol.handshake>(tokenMsg);
                            TheUserLoginState = UserLoginState.LoginRegistResult;
                        }
                    }
                    else if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeFailed)) == req.msg)
                    {
                        Debug.Log("sercet incorrect!");
                        //error handle
                        TheUserLoginState = UserLoginState.LoginFailed;
                    }
                }
                break;

            case UserLoginState.LoginRegistResult:
                {
                    var msg      = Encoding.UTF8.GetString(Convert.FromBase64String(req.msg));
                    var msgArray = msg.Split(':');
                    UserName     = Encoding.UTF8.GetString(Convert.FromBase64String(msgArray[0]));
                    PassWord     = Encoding.UTF8.GetString(Convert.FromBase64String(msgArray[1]));

                    Loom.QueueOnMainThread(() =>
                    {
                        //save registed info
                        PlayerPrefs.SetString("username", UserName);
                        //GameManager.NetWorkClient.UserName = String.Empty;
                        PlayerPrefs.SetString("password", PassWord);
                        PlayerPrefs.SetString("displayname", DisplayName);
                        Debug.Log("saving name " + UserName + " : " + PassWord);
                        PlayerPrefs.Save();
                    });
                    Debug.Log("name " + UserName + " : " + PassWord);

                    //Thread.Sleep(5);
                    TheUserLoginState = UserLoginState.LoginSuccess;
                }
                break;

            case UserLoginState.LoginCheckTokenResult:
            case UserLoginState.LoginSuccess:
                {
                    if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeSuccess)) == req.msg)
                    {
                        //Thread.Sleep(5);
                        Debug.Log("token right");

                        TheUserLoginState = UserLoginState.LoginSuccess;

                        // mChen
                        //if(MultiGameState == GameState.Game_NullState)
                        //{
                        //    FindMatch();
                        //}
                    }
                    else if (Convert.ToBase64String(Encoding.UTF8.GetBytes(challengeFailed)) == req.msg)
                    {
                        //error handle
                        TheUserLoginState = UserLoginState.LoginFailed;
                    }
                }
                break;
            }
            //NetSender.Send<Protocol.handshake>(req);
            //Debug.Log(TheUserLoginState.ToString());
            return(null);
        });

        NetReceiver.AddHandler <Protocol.matchMsg>((_) =>
        {
            SprotoType.matchMsg.request req = _ as matchMsg.request;

            switch (req.matchMsgType)
            {
            case (Int64)MatchMsgType.Match_PlayerJoinedRoom:
                int playerTeamType = Convert.ToInt32(req.matchInfo);
                TheUserMatchState  = UserMatchState.JoinedRoom;
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_PlayerJoinRoom: playerTeamType=" + playerTeamType);
                break;

            case (Int64)MatchMsgType.Match_CountDownTime:
                float countDowmTime = Convert.ToSingle(req.matchInfo) / 100;
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_CountDownTime =" + countDowmTime);
                // UI
                Loom.QueueOnMainThread(() =>
                {
                    UIManager.GetInstance().ShowMatchStartCountDown(countDowmTime);
                });
                break;

            case (Int64)MatchMsgType.Match_TryToJoinMatch:
                int result = Convert.ToInt32(req.matchInfo);
                Debug.Log("NetReceiver: matchMsg: MatchMsgType.Match_TryToJoinMatch: result=" + result);
                MultiGameState = GameState.Game_Match;
                if (result == 0)
                {
                    TheUserMatchState = UserMatchState.WaitToJoinNextMatch;
                    Loom.QueueOnMainThread(() =>
                    {
                        UIManager.GetInstance().ShowWaitToJoinNextMatchLabel();
                    });
                }
                else if (result == 1)
                {
                    TheUserMatchState = UserMatchState.PlayingMatch;
                    Loom.QueueOnMainThread(() =>
                    {
                        UIManager.GetInstance().HideWaitToJoinNextMatchLabel();
                    });
                }
                else
                {
                    Debug.Log("error TryToJoinMatch result from Server" + result);
                    throw new Exception("error TryToJoinMatch result from Server");
                }
                break;

            //case (Int64)MatchMsgType.Match_CancelMatching:
            //    if (QuitMatchingMsg != null)
            //    {
            //        QuitMatchingMsg(this, EventArgs.Empty);
            //    }
            //    break;

            default:
                Debug.Log("error match type" + req.matchMsgType);
                throw new Exception("error msg type");
            }
            return(null);
        });

        NetReceiver.AddHandler <Protocol.usersInfoMsg>((_) =>
        {
            if (MultiGameState == GameState.Game_NullState)
            {
                return(null);
            }
            Debug.Log("get usersInfoMsg");

            SprotoType.usersInfoMsg.request req           = _ as SprotoType.usersInfoMsg.request;
            GameObjectsManager.s_LocalPlayerIndexInGlobal = (int)req.curUserGlobalIndex;
            //Debug.Log("get player index in global: " + GameObjectsManager.s_LocalPlayerIndexInGlobal);

            //Create players
            Loom.QueueOnMainThread(() =>
            {
                AllPlayers.Clear();
                GameObjectsManager.GetInstance().ClearPlayers();

                Debug.Log("received usersInfoMsg:");
                foreach (SprotoType.UserInfo serverPlayerinfo in req.userArray)
                {
                    PlayerTeam.PlayerTeamType teamType = (PlayerTeam.PlayerTeamType)serverPlayerinfo.playerTeamType;
                    PlayerTeam team = GameObjectsManager.GetInstance().GetPlayerTeam(teamType);
                    int userState   = (int)serverPlayerinfo.userState;

                    Debug.Log("     UserIndexInGlobal=" + serverPlayerinfo.playerIndex + " UserName="******" userState=" + userState + " TeamType=" + teamType);

                    if (serverPlayerinfo.playerIndex == req.curUserGlobalIndex)
                    {
                        // is local player

                        if (userState == (int)UserMatchState.PlayingMatch)
                        {
                            GameObjectsManager.s_LocalHumanTeamType = teamType;
                        }
                    }

                    int playerIndexInTeam = -1;
                    if (userState == (int)UserMatchState.PlayingMatch)
                    {
                        // create a new player

                        playerIndexInTeam = team.AddAPlayer(false);
                    }

                    // set AllPlayers
                    AllPlayers.Add(new MultiPlayerInfo
                    {
                        PlayIndexInGlobal = serverPlayerinfo.playerIndex,
                        PlayerName        = serverPlayerinfo.username,
                        SkinId            = 0,
                        PlayerId          = 1,
                        ThePlayerTeamType = teamType,
                        PlayerIndexInTeam = playerIndexInTeam
                    });
                }
            });

            //TheUserMatchState = UserMatchState.AllPlayersJoinedRoom;
            return(null);
        });

        NetReceiver.AddHandler <Protocol.waitforstart>((_) =>
        {
            Debug.Log("Second half start!!");
            var res = _ as SprotoType.waitforstart.request;
            //mChen
            //switch (GameManager.GetInstance().TheGamePrePeriod)
            //{
            //    case GamePeriod.Opening:
            //        break;
            //    case GamePeriod.FirstHalf:
            //        break;
            //    case GamePeriod.Halftime:
            //        break;
            //    case GamePeriod.CutsceneAfterScoredOr24SecondsViolation:
            //        break;
            //    case GamePeriod.WairForGameToContinue:
            //        break;
            //    case GamePeriod.SecondHalf:
            //        GameManager.GetInstance().HalfTimeReadyFrame = res.readyFrame;
            //        break;
            //    case GamePeriod.Ending:
            //        break;
            //    default:
            //        throw new ArgumentOutOfRangeException();
            //}

            return(null);
        });

        NetReceiver.AddHandler <Protocol.gameTick>((_) =>
        {
            //Debug.Log("response called");
            if (false)//mChen if (GameManager.TheGameMode > GameMode.MultiGame_3v3)
            {
                //when single mode, do not handle this server tick
                return(null);
            }

            if (MultiGameState == GameState.Game_Match)
            {
                MultiGameState = GameState.Game_Running;

                Loom.QueueOnMainThread(() =>
                {
                    UIManager.GetInstance().HideMatchStartCountDown();
                });

                //mChen
                _sendHeartBeatThread = new Thread(SendHeartBeatMsg)
                {
                    IsBackground = true
                };
                //防止后台现成。相反需要后台线程就设为false
                _sendHeartBeatThread.Start();
                while (_sendHeartBeatThread.IsAlive == false)
                {
                }
            }

            SprotoType.gameTick.request res = _ as gameTick.request;
            {
                // bool bOnlyFrameInfo = true;

                if (res.HasButtonMsg)
                {
                    //mChen
                    //foreach (var btnMsg in res.buttonMsg)
                    //{
                    //    ButtonInfo msg = new ButtonInfo
                    //    {
                    //        TeamType =
                    //            (PlayerTeamType)((btnMsg.playerIndex) / GameManager.TeamPlayerNum),
                    //        PlayerIndexInTeam = (btnMsg.playerIndex) % GameManager.TeamPlayerNum,
                    //        FrameNum = res.frame,
                    //        Action = (ButtonAction)btnMsg.btnAction,
                    //        Type = (ButtonType)btnMsg.btnType
                    //    };

                    //    if (btnMsg.HasBtnValueX)
                    //    {
                    //        msg.Value.x = (float)BitConverter.ToDouble(BitConverter.GetBytes(btnMsg.btnValueX), 0);
                    //        msg.Value.y = (float)BitConverter.ToDouble(BitConverter.GetBytes(btnMsg.btnValueY), 0); ;
                    //    }
                    //    ControlManager.GetInstance().AddControlInfo(msg);
                    //    //Debug.Log("Button msg");
                    //}

                    // bOnlyFrameInfo = false;
                }

                //_controllerMsg.Clear();
                if (res.HasControlMsg)
                {
                    //Debug.Log("controller called");
                    //List < ControlMsg > tempList = new List<ControlMsg>();

                    foreach (var resControl in res.controlMsg)
                    {
                        //mChen
                        //DPadInfo msg = new DPadInfo
                        //{
                        //    FrameNum = res.frame,
                        //    TeamType = (PlayerTeamType)(resControl.playerIndex / GameManager.TeamPlayerNum),
                        //    PlayerIndexInTeam = resControl.playerIndex % GameManager.TeamPlayerNum,
                        //    //H = Convert.ToSingle(resControl.x),
                        //    //V = Convert.ToSingle(resControl.y)
                        //    H = (float)BitConverter.ToDouble(BitConverter.GetBytes(resControl.x), 0),
                        //    V = (float)BitConverter.ToDouble(BitConverter.GetBytes(resControl.y), 0)
                        //};

                        //ControlManager.GetInstance().AddControlInfo(msg);
#if false
                        if (ControlManager.GetInstance().GameFrameNum % 150 == 1)
                        {
                            GameManager.GetInstance().InfoStr += string.Format("\n dpad info {0} {1} at frame {2}",
                                                                               msg.H, msg.V, ControlManager.GetInstance().GameFrameNum);
                        }
#endif
                        // Debug.LogFormat("dpad msg frame {0} : h {1} v {2} ", res.frame, msg.H, msg.V);
                    }


                    // bOnlyFrameInfo = false;
                }

                if (res.HasPlayersGamePlayMsg)
                {
                    Loom.QueueOnMainThread(() =>
                    {
                        foreach (var playerGamePlayMsg in res.playersGamePlayMsg)
                        {
                            int playerIndex = (int)playerGamePlayMsg.playerIndex;
                            float posX      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posX), 0);
                            float posY      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posY), 0);
                            float posZ      = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.posZ), 0);
                            float angleX    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleX), 0);
                            float angleY    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleY), 0);
                            float angleZ    = (float)BitConverter.ToDouble(BitConverter.GetBytes(playerGamePlayMsg.angleZ), 0);
                            //Debug.Log("playerInfoMsg:" + playerGamePlayMsg.playerIndex + " pos:" + posX + posY + posZ);

                            if (playerIndex == GameObjectsManager.s_LocalPlayerIndexInGlobal)
                            {
                            }
                            else
                            {
                                PlayerTeam.PlayerTeamType teamType = AllPlayers[playerIndex].ThePlayerTeamType;
                                int playerIndexInTeam = AllPlayers[playerIndex].PlayerIndexInTeam;
                                PlayerBase player     = GameObjectsManager.GetInstance().GetPlayer(teamType, playerIndexInTeam);
                                if (player != null)
                                {
                                    player.transform.position    = new Vector3(posX, posY, posZ);
                                    player.transform.eulerAngles = new Vector3(angleX, angleY, angleZ);
                                }
                            }
                        }
                    });
                }

                //添加一般帧信息
                //if (bOnlyFrameInfo)
                {
                    //mChen ControlManager.GetInstance().AddControlInfo(res.frame);
                }
            }
            return(null);
        });

        NetReceiver.AddHandler <Protocol.restoreStates>((_) =>
        {
            var req           = _ as SprotoType.restoreStates.request;
            TheUserMatchState = (UserMatchState)req.serverState;
            Debug.Log("resotre user state now " + TheUserMatchState.ToString());
            var infoArray = req.stateInfo.Split(':');

            switch (req.serverState)
            {
            case (int)UserMatchState.FindRoom:
                ParseFindMatchMsg(infoArray);
                TheUserMatchState = UserMatchState.FindRoom;
                //mChen Loom.QueueOnMainThread(GameUIManager.GetInstance().UIChangeToMatching);
                //GameUIManager.GetInstance().UIChangeToMatching();//go to matching ui
                break;
            }
            return(null);
        });
    }
Пример #22
0
        //SprotoType.Handshake.request req = new SprotoType.Handshake.request();
        //req.uid = uid;
        //req.token = token;

        //NetSender.Send<Protocol.Handshake>(req, (_) =>
        //{
        // SprotoType.Handshake.response rsp = _ as SprotoType.Handshake.response;
        // if (rsp.result == 0)
        // {
        // }
        //});

        //SprotoTypeBase HeartbeatRsp(SprotoTypeBase _)
        //{
        //    SprotoType.Heartbeat.request req = _ as SprotoType.Heartbeat.request;
        //    return null; // can return a response
        //}

        //NetReceiver.AddHandler<Protocol.Heartbeat>(HeartbeatRsp);

        public void Send <T>(SprotoTypeBase rpcReq = null, RpcRspHandler rpcRspHandler = null)
        {
            NetSender.Send <T>(rpcReq, rpcRspHandler);
        }
Пример #23
0
        /// <summary>
        /// Handles preventing or allowing certain characters in the Rich Text Box
        /// destination field based on the user's preferences, and logs permitted
        /// characters.
        /// </summary>
        /// <param name="sender">The sender of this event.</param>
        /// <param name="e">The arguments for this event.</param>
        private void rtxTranscribed_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            switch (e.KeyChar)
            {
            case '\t':          // Tab
            case '\n':          // Enter
            case '\r':          // Enter
            case '\x1B':        // Esc (27)
                e.Handled = true;
                break;

            case '\x7F':        // Ctrl+Bksp (127)
                e.Handled = true;
                break;

            case '\b':          // Backspace (8)
                e.Handled = _o.NoBackspace;
                break;

            default:            // some prevention preferences
                if (_o.NoCapitals && Char.IsUpper(e.KeyChar))
                {
                    char chLow = Char.ToLower(e.KeyChar);
                    rtxTranscribed.Text += chLow;
                    rtxTranscribed.Select(rtxTranscribed.TextLength, 0);
                    _td.Add(new EntryData(chLow, TimeEx.NowTicks));     // forced to lowercase
                    e.Handled = true;
                }
                if (_o.NoNumbers && Char.IsDigit(e.KeyChar))
                {
                    e.Handled = true;
                }
                if (_o.NoPunctuation && (Char.IsPunctuation(e.KeyChar) || Char.IsSymbol(e.KeyChar)))
                {
                    e.Handled = true;
                }
                break;
            }

            // log the character if it wasn't prevented
            if (!e.Handled)
            {
                // all regular characters are logged here. we use a loop to handle
                // word-level backspacing where a word is selected and then backspaced
                // in a single key-press. for analysis reasons, such word-level backspaces
                // must be logged as individual backspaces, but their identical timestamps
                // belie their true nature as originating from a single keypress.
                do
                {
                    _td.Add(new EntryData(e.KeyChar, TimeEx.NowTicks));

                    // send the character over TCP if desired
                    if (_o.SendOnTcp &&
                        _sender != null &&
                        _sender.IsConnected)
                    {
                        _sender.Send(e.KeyChar.ToString());
                    }
                } while (--_bkspSelLength > 0);
                _bkspSelLength = 0; // reset
            }
        }