Пример #1
0
        private bool objectIsSame(object obj1, object obj2)
        {
            string x1 = SerializeHelper.ConvertToString(SerializeHelper.SerializeToXml(obj1));
            string x2 = SerializeHelper.ConvertToString(SerializeHelper.SerializeToXml(obj2));

            return(x1 == x2);
        }
Пример #2
0
    public void Update()
    {
        if (serverEvent.Count > 0)
        {
            MessageXieYi xieyi = serverEvent.Dequeue();
            if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.getRoomInfo)//房间信息
            {
                Have_RoomInfo();
            }
            if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.getRoommateInfo)//房间中人物信息
            {
                Have_MateInfo();
            }

            if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.prepareLocalModel)
            {
                RoomActorUpdate roomActorUpdate = new RoomActorUpdate();
                roomActorUpdate.SetSendInfo(SerializeHelper.ConvertToString(xieyi.MessageContent));
                if (allLoad.ContainsKey(roomActorUpdate.userIndex))
                {
                    allLoad[roomActorUpdate.userIndex].UpdateSlider(int.Parse(roomActorUpdate.update));
                }
                else
                {
                    Debug.LogError("在该UI未准备好的时候,收到了该用户的进度。");
                }
            }
        }
    }
Пример #3
0
    private void CheckState(MessageXieYi xieyi)
    {
        string          messageInfo     = SerializeHelper.ConvertToString(xieyi.MessageContent);
        RoomActorUpdate roomActorUpdate = new RoomActorUpdate();

        roomActorUpdate.SetSendInfo(messageInfo);
        if (roomActorUpdate.userIndex == DataController.instance.MyLocateIndex)
        {
            RoomActorState state = (RoomActorState)int.Parse(roomActorUpdate.update);
            Debug.Log("我的状态:" + state);
            //判断我的状态为预准备
            switch (state)
            {
            case RoomActorState.PrepareModel:
                GameLoadingUI.Show();
                //PrepareLocalModel();
                break;

            case RoomActorState.ModelPrepared:
                break;

            case RoomActorState.Invincible:
                GameRunUI.instance.Open();
                //MyJoystickManager.instance.Open();
                break;
            }
        }
    }
Пример #4
0
    public static ErrorType CheckIsError(MessageXieYi xieyi)
    {
        string message = SerializeHelper.ConvertToString(xieyi.MessageContent);

        string[] sp = message.Split(new string[] { ErrorSplit }, StringSplitOptions.None);
        if (sp.Length > 1)
        {
            return((ErrorType)int.Parse(sp[1]));
        }
        return(ErrorType.none);
    }
Пример #5
0
 public void Update()
 {
     if (serverEvent.Count > 0)
     {
         MessageXieYi xieyi = serverEvent.Dequeue();
         if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.getRoommateInfo)
         {
             ErrorType error = ClassGroup.CheckIsError(xieyi);
             if (error != ErrorType.none)
             {
                 Debug.LogError(error);
             }
             else
             {
                 HomeUI.Close();
                 Debug.Log("根据玩家数据刷新房间UI");
                 ReflashBtnReady();
                 ReflashRoomInfo();
                 ReflashRoomState();
             }
         }
         if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.updateActorState)
         {
             ErrorType error = ClassGroup.CheckIsError(xieyi);
             if (error != ErrorType.none)
             {
                 Debug.LogError(error);
             }
             else
             {
                 string          messageInfo     = SerializeHelper.ConvertToString(xieyi.MessageContent);
                 RoomActorUpdate roomActorUpdate = new RoomActorUpdate();
                 roomActorUpdate.SetSendInfo(messageInfo);
                 RoomActorState state = (RoomActorState)int.Parse(roomActorUpdate.update);
                 if (state == RoomActorState.Ready || state == RoomActorState.NoReady || state == RoomActorState.Offline)
                 {
                     ReflashRoomState();
                 }
             }
         }
         if ((MessageConvention)xieyi.XieYiFirstFlag == MessageConvention.updateRoom)
         {
             ErrorType error = ClassGroup.CheckIsError(xieyi);
             if (error != ErrorType.none)
             {
                 Debug.LogError(error);
             }
             else
             {
                 UpdateUIInfo();
             }
         }
     }
 }
Пример #6
0
    private void EndGaming(MessageXieYi xieyi)
    {
        Debug.Log("结束游戏");
        CurrentPlayType = FramePlayType.游戏未开始;
        frameIndex      = 0;
        reConnectIndex  = 0;//游戏结束的时候未完成复现,则清除重连记录帧
        CameraManager.instance.SetCameraEnable(false);
        CameraManager.instance.SetCameraFollow(transform);
        foreach (var item in memberGroup)
        {
            item.Value.Init(item.Key);
        }
        GameRunUI.Close();
        TeamType winTeam = (TeamType)int.Parse(SerializeHelper.ConvertToString(xieyi.MessageContent));

        RoomUI.Show();
        GameOverUI.Show(winTeam);
    }
Пример #7
0
    void TestMait()
    {
        //obj.GetComponent<MeshRenderer>().material = (Material)Resources.Load(DataController.materialPathSkill + DataController.materialNameSkill + id);
        //string info = "8,0,172,0,0,0,0,1,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0,12,2,0,0,0,64,83,101,114,105,97,108,105,122,101,44,32,86,101,114,115,105,111,110,61,49,46,48,46,48,46,48,44,32,67,117,108,116,117,114,101,61,110,101,117,116,114,97,108,44,32,80,117,98,108,105,99,75,101,121,84,111,107,101,110,61,110,117,108,108,5,1,0,0,0,17,65,99,116,111,114,78,101,116,65,110,105,109,97,116,105,111,110,3,0,0,0,9,114,111,111,109,73,110,100,101,120,9,117,115,101,114,73,110,100,101,120,14,97,110,105,109,97,116,105,111,110,73,110,100,101,120,0,0,0,8,8,8,2,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,11,7,0,19,0,0,0,48,44,48,44,48,44,45,57,50,44,45,51,44,48,44,48,44,48,44,7,0,19,0,0,0,48,44,48,44,48,44,45,57,49,44,45,53,44,48,44,48,44,48,44,7,0,20,0,0,0,48,44,48,44,45,49,44,45,57,49,44,45,57,44,48,44,48,44,48,44,7,0,21,0,0,0,48,44,48,44,45,51,44,45,57,49,44,45,49,51,44,48,44,48,44,48,44,44,48,44,48,44,48,44,7,0,18,0,0,0,48,44,48,44,48,44,45,57,49,44,48,44,48,44,48,44,48,44,7,0,18,0,0,0,48,44,48,44,48,44,45,57,49,44,48,44,48,44,48,44,48,44,7,0,18,0,0,0,4";
        //Debug.LogError(info.Split(',').Length);
        string sMsg = "{'ErrorType':'6'}";

        byte[] bm = SerializeHelper.ConvertToByte(sMsg);

        MessageXieYi xieyi = new MessageXieYi()
        {
            MessageContent = bm, MessageContentLength = bm.Length, XieYiFirstFlag = 0, XieYiSecondFlag = 0
        };
        string  message = SerializeHelper.ConvertToString(xieyi.MessageContent);
        JObject json    = JObject.Parse(message);

        if (json != null)
        {
            Debug.LogError("eee");
        }
    }
Пример #8
0
        private void btnXmlSerialize_Click(object sender, EventArgs e)
        {
            SA = new Student("tommy", 18, "xx");
            SB = new Student("jason", 19, "xx");
            SC = new Student("suny", 20, "xx");
            T1 = new Teacher("Eike", 59);
            T2 = new Teacher("Peter", 60);
            T1.Student.Add(SA);
            T1.Student.Add(SB);
            T2.Student.Add(SC);

            T1.Print();//print the object before XmlSerialize
            T1.XmlSerialize();
            T1.Print();
            T1.Name = "Test";
            T1      = (Teacher)T1.XmlUnSerialize();
            T1.Print();

            string aa = SerializeHelper.ConvertToString(SerializeHelper.SerializeToXml(T1));

            Console.WriteLine(aa);
        }
Пример #9
0
    /// <summary>
    /// tcp
    /// </summary>
    /// <param name="xieyi"></param>
    /// <param name="userToken"></param>
    /// <returns></returns>
    public byte[] SelectMessage(MessageXieYi xieyi, AsyncUserToken userToken)
    {
        JObject json = null;

        byte[]             newBuffer          = null;
        byte[]             tempMessageContent = xieyi.MessageContent;
        int                roomID             = userToken.userInfo.RoomID;
        SingleRoom         room            = GetSingleRoomByID(roomID);
        Register           login           = null;
        RoomActorUpdate    roomActorUpdate = null;
        ActorMoveDirection moveDirection   = null;

        if (userToken == null)
        {
            Log4Debug("该用户已被清理,不处理接收数据。");
            return(newBuffer);
        }
        if (allRoom.RoomList.ContainsKey(userToken.userInfo.RoomID))
        {
            room = allRoom.RoomList[userToken.userInfo.RoomID];
        }

        //Log4Debug("/" + xieyi.MessageContentLength);
        //try
        {
            switch ((MessageConvention)xieyi.XieYiFirstFlag)
            {
            case MessageConvention.login:
                login     = SerializeHelper.Deserialize <Register>(tempMessageContent);
                newBuffer = Login(login, userToken);
                break;

            case MessageConvention.getHeartBeatTime:
                HeartbeatTime hbTime = new HeartbeatTime()
                {
                    time = AsyncIOCPServer.HeartbeatSecondTime
                };
                newBuffer = SerializeHelper.Serialize <HeartbeatTime>(hbTime);
                break;

            case MessageConvention.reConnectCheck:
                //检查是否是掉线用户
                ReconnctInfo rcInfo = new ReconnctInfo();
                if (OffLineRooms.ContainsKey(userToken.userInfo.Register.userID))
                {
                    int offRoomID = OffLineRooms[userToken.userInfo.Register.userID];
                    userToken.userInfo.RoomID = offRoomID;
                    allRoom.RoomList[offRoomID].ReConnect(userToken);

                    int removeCount = 0;
                    OffLineRooms.TryRemove(userToken.userInfo.Register.userID, out removeCount);
                    rcInfo.isReconnect = true;
                }
                else
                {
                    rcInfo.isReconnect = false;
                }
                newBuffer = SerializeHelper.Serialize <ReconnctInfo>(rcInfo);
                break;

            case MessageConvention.reConnectIndex:
                room.GetReConnectFrameData(userToken.userInfo.UniqueID);
                break;

            case MessageConvention.heartBeat:
                //心跳检测客户端传递服务器时间
                //Log4Debug("接收到 " + userToken.userInfo.Register.name + " 的心跳检测");
                //newBuffer = SerializeHelper.DateTimeToBytes(DateTime.Now);
                //newBuffer = SerializeHelper.Serialize<HeartbeatTime>(new HeartbeatTime() { time = AsyncIOCPServer.HeartbeatSecondTime });
                break;

            case MessageConvention.updateName:
                string updateName = SerializeHelper.ConvertToString(tempMessageContent);
                Log4Debug("修改人物信息:" + updateName);
                newBuffer = UpdateName(userToken, updateName);
                break;

            case MessageConvention.createRoom:
                json      = JObject.Parse(SerializeHelper.ConvertToString(xieyi.MessageContent));
                newBuffer = allRoom.CreateNewRoom(json, userToken);
                break;

            case MessageConvention.joinRoom:
                json      = JObject.Parse(SerializeHelper.ConvertToString(xieyi.MessageContent));
                newBuffer = allRoom.JoinRoom(json, userToken);
                break;

            case MessageConvention.updateRoom:
                Log4Debug("更新房间");
                json      = JObject.Parse(SerializeHelper.ConvertToString(xieyi.MessageContent));
                newBuffer = allRoom.UpdateRoom(json);
                break;

            case MessageConvention.getRoomInfo:
                newBuffer = SerializeHelper.Serialize <RoomInfo>(room.RoomInfo);
                break;

            case MessageConvention.getRoommateInfo:
                Log4Debug("请求房间人物信息:" + SerializeHelper.ConvertToString(tempMessageContent));
                roomActorUpdate = new RoomActorUpdate();
                roomActorUpdate.SetSendInfo(SerializeHelper.ConvertToString(tempMessageContent));
                //
                newBuffer = SerializeHelper.Serialize <List <RoomActor> >(new List <RoomActor>(room.ActorList.Values));
                break;

            case MessageConvention.quitRoom:
                QuitInfo qInfo = SerializeHelper.Deserialize <QuitInfo>(tempMessageContent);
                if (room != null)
                {
                    room.CheckQuit(userToken, qInfo);
                }
                break;

            case MessageConvention.updateActorAnimation:
                ActorNetAnimation netAnimation = new ActorNetAnimation();
                netAnimation.SetSendInfo(SerializeHelper.ConvertToString(tempMessageContent));
                //Log4Debug("set->" + netAnimation.animationIndex + "");
                room.UpdateAnimation(netAnimation);    //更新
                break;

            case MessageConvention.updateActorState:
                roomActorUpdate = new RoomActorUpdate();
                roomActorUpdate.SetSendInfo(SerializeHelper.ConvertToString(tempMessageContent));
                Log4Debug("站位:" + userToken.userInfo.UniqueID + "/" + userToken.userInfo.Register.name
                          + "用户站位:" + roomActorUpdate.userIndex +
                          "请求修改状态为->" + (RoomActorState)int.Parse(roomActorUpdate.update));
                //
                room.UpdateState(roomActorUpdate);    //更新
                break;

            case MessageConvention.prepareLocalModel:
                roomActorUpdate = new RoomActorUpdate();
                roomActorUpdate.SetSendInfo(SerializeHelper.ConvertToString(tempMessageContent));
                //
                room.UpdatePrepare(roomActorUpdate, userToken);    //更新
                break;

            case MessageConvention.getPreGameData:

                break;

            case MessageConvention.startGaming:

                break;

            case MessageConvention.endGaming:

                break;

            case MessageConvention.frameData:
                FrameInfo frame = SerializeHelper.Deserialize <FrameInfo>(tempMessageContent);
                newBuffer = room.GetBoardFrame(frame.frameIndex);
                //Log4Debug("用户" + userToken.userInfo.Register.name + "/请求帧数据:" + frame.frameIndex + "/" + room.RoomInfo.FrameIndex + "数据总长:" + newBuffer.Length);
                break;

            //case MessageConvention.setUDP:
            //    UDPLogin loginUDP = SerializeHelper.Deserialize<UDPLogin>(tempMessageContent);
            //    Log4Debug("收到登录UDP账号:" + loginUDP.login);
            //    room.UpdateUDP(userToken.userInfo.UniqueID, loginUDP);
            //    break;
            default:
                Log4Debug("TCP是否判断该协议:" + (MessageConvention)xieyi.XieYiFirstFlag);
                break;
            }
        }
        //catch (Exception error)
        //{
        //    Log4Debug("处理逻辑错误:" + error.Message);
        //}
        //  创建一个发送缓冲区。
        byte[] sendBuffer = null;
        if (newBuffer != null)//用户需要服务器返回值给自己的话
        {
            xieyi      = new MessageXieYi(xieyi.XieYiFirstFlag, xieyi.XieYiSecondFlag, newBuffer);
            sendBuffer = xieyi.ToBytes();
        }
        return(sendBuffer);
    }
Пример #10
0
    /// <summary>
    /// 判断并通知事件回调
    /// </summary>
    /// <param name="buff"></param>
    private void DealXieYi(MessageXieYi xieyi, AsyncUserToken userToken)
    {
        //Debug.LogError("处理协议:" + (MessageConvention)xieyi.XieYiFirstFlag);
        byte[]          tempMessageContent = xieyi.MessageContent;
        string          messageInfo        = "";
        ErrorType       error           = ErrorType.none;
        RoomActor       actor           = null;
        RoomActorUpdate roomActorUpdate = new RoomActorUpdate();

        //if (tempMessageContent.Length > 200)
        //{
        //    Debug.Log((MessageConvention)xieyi.XieYiFirstFlag + "单次接收数据超过200/" + tempMessageContent.Length);
        //}
        try
        {
            //处理数值到DataController
            switch ((MessageConvention)xieyi.XieYiFirstFlag)
            {
            case MessageConvention.error:
                break;

            case MessageConvention.login:
                error = ClassGroup.CheckIsError(xieyi);
                if (error == ErrorType.none)
                {
                    actor = SerializeHelper.Deserialize <RoomActor>(xieyi.MessageContent);
                    DataController.instance.myInfo = actor;
                }
                break;

            case MessageConvention.getHeartBeatTime:
                HeartbeatTime beatTime = SerializeHelper.Deserialize <HeartbeatTime>(xieyi.MessageContent);
                heartbeatSecondTime = beatTime.time - 1;    //-1防止和服务器心跳时间一致的时候会导致偏差
                //Debug.Log("心跳间隔:" + heartbeatSecondTime);
                break;

            case MessageConvention.reConnectCheck:
                break;

            case MessageConvention.reConnectIndex:
                int index = int.Parse(SerializeHelper.ConvertToString(xieyi.MessageContent));
                GameManager.instance.reConnectIndex = index;
                break;

            case MessageConvention.heartBeat:
                break;

            case MessageConvention.updateName:
                actor = SerializeHelper.Deserialize <RoomActor>(xieyi.MessageContent);
                DataController.instance.myInfo = actor;
                break;

            case MessageConvention.createRoom:
            case MessageConvention.joinRoom:
                JoinRoom joinInfo = new JoinRoom();
                joinInfo = SerializeHelper.Deserialize <JoinRoom>(tempMessageContent);
                DataController.instance.MyLocateIndex = joinInfo.unique;
                break;

            case MessageConvention.updateRoom:
                //Debug.Log((MessageConvention)xieyi.XieYiFirstFlag + "数据长度:" + xieyi.MessageContent.Length);
                error = ClassGroup.CheckIsError(xieyi);
                if (error == ErrorType.none)
                {
                    DataController.instance.MyRoomInfo = SerializeHelper.Deserialize <RoomInfo>(tempMessageContent);
                }
                break;

            case MessageConvention.getRoomInfo:
                DataController.instance.MyRoomInfo = SerializeHelper.Deserialize <RoomInfo>(tempMessageContent);
                Debug.LogError("得到房间号:" + DataController.instance.MyRoomInfo.RoomID);
                break;

            case MessageConvention.quitRoom:
                QuitInfo qInfo = SerializeHelper.Deserialize <QuitInfo>(xieyi.MessageContent);
                if (qInfo.isQuit)
                {
                    DataController.instance.MyRoomInfo = null;
                    DataController.instance.ActorList  = null;
                }
                break;

            case MessageConvention.getRoommateInfo:
                List <RoomActor> rActors = SerializeHelper.Deserialize <List <RoomActor> >(tempMessageContent);
                for (int i = 0; i < rActors.Count; i++)
                {
                    if (DataController.instance.ActorList == null)
                    {
                        DataController.instance.ActorList = new Dictionary <int, RoomActor>();
                    }
                    lock (DataController.instance.ActorList)
                    {
                        if (!DataController.instance.ActorList.ContainsKey(rActors[i].UniqueID))
                        {
                            DataController.instance.ActorList.Add(rActors[i].UniqueID, null);
                        }
                        DataController.instance.ActorList[rActors[i].UniqueID] = rActors[i];
                    }
                }
                Debug.Log("得到房间人物列表。");
                break;

            case MessageConvention.rotateDirection:

                break;

            case MessageConvention.updateActorAnimation:
                messageInfo = SerializeHelper.ConvertToString(xieyi.MessageContent);
                ActorNetAnimation getNetAnimation = new ActorNetAnimation();
                getNetAnimation.SetSendInfo(messageInfo);
                //if (GameManager.instance.memberGroup.ContainsKey(getNetAnimation.userIndex))
                //{
                //    if (GameManager.instance.memberGroup[getNetAnimation.userIndex] != null)
                //    {
                //        //此处需要修改
                //        //GameManager.instance.memberGroup[getNetAnimation.userIndex].NetAnimation = getNetAnimation;
                //    }
                //    //else if (getNetAnimation.userIndex == DataController.instance.myRoomInfo.MyLocateIndex)//服务器给我设置了
                //    //{
                //    //    MyController.instance.InitNetSaveInfo(null, null, getNetAnimation);
                //    //}
                //}
                break;

            case MessageConvention.updateActorState:
                messageInfo = SerializeHelper.ConvertToString(tempMessageContent);
                roomActorUpdate.SetSendInfo(messageInfo);
                //Debug.Log("更新用户->" + roomActorUpdate.userIndex + " 状态为:" + (RoomActorState)int.Parse(roomActorUpdate.update));
                lock (DataController.instance.ActorList)
                {
                    DataController.instance.ActorList[roomActorUpdate.userIndex].CurState = (RoomActorState)int.Parse(roomActorUpdate.update);
                }
                break;

            case MessageConvention.prepareLocalModel:
                messageInfo = SerializeHelper.ConvertToString(tempMessageContent);
                roomActorUpdate.SetSendInfo(messageInfo);
                break;

            case MessageConvention.updateModelInfo:

                break;

            case MessageConvention.getPreGameData:
                //Debug.Log("getPreGameData已收到。");
                break;

            case MessageConvention.startGaming:
                string time = SerializeHelper.ConvertToString(tempMessageContent);
                Debug.Log("开始游戏时间:" + time);
                startGamTime = DateTime.Parse(time);
                break;

            case MessageConvention.shootBullet:
                break;

            case MessageConvention.bulletInfo:
                break;

            case MessageConvention.endGaming:
                messageInfo = SerializeHelper.ConvertToString(tempMessageContent);
                Debug.Log("胜利队伍是:" + (TeamType)int.Parse(messageInfo));
                break;

            case MessageConvention.moveDirection:    //GameManager中处理帧同步相应协议

                break;

            case MessageConvention.frameData:

                break;

            default:
                Debug.LogError("没有协议:" + xieyi.XieYiFirstFlag + "/MesageLength:" + xieyi.MessageContentLength);
                break;
            }

            //在数据处理后再执行委托响应脚本
            lock (allHandle)
            {
                if (allHandle.ContainsKey((MessageConvention)xieyi.XieYiFirstFlag))
                {
                    allHandle[(MessageConvention)xieyi.XieYiFirstFlag](xieyi);
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogError("处理协议错误:" + e.Message + "/协议:" + (MessageConvention)xieyi.XieYiFirstFlag);
        }
    }