private bool objectIsSame(object obj1, object obj2) { string x1 = SerializeHelper.ConvertToString(SerializeHelper.SerializeToXml(obj1)); string x2 = SerializeHelper.ConvertToString(SerializeHelper.SerializeToXml(obj2)); return(x1 == x2); }
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未准备好的时候,收到了该用户的进度。"); } } } }
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; } } }
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); }
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(); } } } }
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); }
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"); } }
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); }
/// <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); }
/// <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); } }