public void GetReConnectFrameData(int unique) { AsyncUserToken userToken = UserTokenInfo[unique]; int curFrame = FrameIndex; byte[] message = null; MessageXieYi xieyi = null; xieyi = new MessageXieYi((byte)MessageConvention.reConnectIndex, 0, SerializeHelper.ConvertToByte(curFrame + "")); AsyncIOCPServer.instance.SendSave(userToken, xieyi.ToBytes()); Log4Debug("重连标记帧:" + curFrame); //帧数据 int limetNum = 1800; int count = curFrame / limetNum; count += 1; for (int i = 0; i < count; i++) { int min = i * limetNum; int max = (i + 1) * limetNum + 1;//多加1帧 if (max > curFrame) { max = curFrame; } message = GetBoardFrame(min, max); if (message == null) { Log4Debug("重连数据中有空数据->(" + min + "," + max + ")"); } xieyi = new MessageXieYi((byte)MessageConvention.frameData, 0, message); AsyncIOCPServer.instance.SendSave(userToken, xieyi.ToBytes()); Log4Debug("发送重连数据->(" + min + "," + max + ")"); } }
public void UpdatePrepare(RoomActorUpdate roomActorUpdate, AsyncUserToken userToken) { if (ActorList[roomActorUpdate.userIndex] == null) { return; } int index = roomActorUpdate.userIndex; int preLoadProgress = int.Parse(roomActorUpdate.update); Log4Debug("站位 " + roomActorUpdate.userIndex + " 当前准备进度为" + preLoadProgress + "%"); BoardcastMessage(MessageConvention.prepareLocalModel, SerializeHelper.ConvertToByte(roomActorUpdate.GetSendInfo())); //玩家自己本地模型加载到100%就给该玩家发送网络数据 if (preLoadProgress >= 100) { RoomActorUpdate actorState = new RoomActorUpdate() { userIndex = index, update = (int)RoomActorState.ModelPrepared + "" }; UpdateState(actorState); GetRoommateNetData(roomActorUpdate.userIndex, userToken); } }
public void OnClickChangeInfo() { if (selectModel != GameModel.组队模式) { UIManager.instance.ShowAlertTip("该模式还未开启。"); return; } //tcp string[] colum = new string[] { nameof(Register.userID), nameof(RoomInfo.RoomID), nameof(RoomInfo.RoomType), nameof(RoomInfo.RoomName) }; string[] value = new string[] { DataController.instance.myInfo.Register.userID, DataController.instance.MyRoomInfo.RoomID + "", (int)selectModel + "", inputName.text }; string tcp = ClassGroup.StringToJosn(colum, value); byte[] message = SerializeHelper.ConvertToByte(tcp); SocketManager.instance.SendSave((byte)MessageConvention.updateRoom, message); }
public void OnClickJoinRoom() { if (selectModel != GameModel.组队模式) { UIManager.instance.ShowAlertTip("该模式还未开启。"); return; } if (downID.value == 1)//加入指定房间,则需要房间号 { if (string.IsNullOrEmpty(inputID.text)) { UIManager.instance.ShowAlertTip("房间号为空。"); return; } } //RoomUI.Show(); //tcp string[] colum = new string[] { nameof(RoomInfo.RoomType), nameof(Register.userID), nameof(RoomInfo.RoomID) }; string[] value = new string[] { (int)selectModel + "", DataController.instance.myInfo.Register.userID, inputID.text }; string tcp = ClassGroup.StringToJosn(colum, value); byte[] message = SerializeHelper.ConvertToByte(tcp); SocketManager.instance.SendSave((byte)MessageConvention.joinRoom, message); // }
public void OnClickCreateRoom() { if (selectModel != GameModel.组队模式) { UIManager.instance.ShowAlertTip("该模式还未开启。"); return; } if (string.IsNullOrEmpty(inputName.text)) { UIManager.instance.ShowAlertTip("房间名称为空"); return; } // //RoomUI.Show(); string[] colum = new string[] { nameof(RoomInfo.RoomName), nameof(RoomInfo.RoomType), nameof(Register.userID) }; string[] value = new string[] { inputName.text, (int)selectModel + "", DataController.instance.myInfo.Register.userID }; string tcp = ClassGroup.StringToJosn(colum, value); byte[] message = SerializeHelper.ConvertToByte(tcp); SocketManager.instance.SendSave((byte)MessageConvention.createRoom, message); // }
public void UpdateAnimation(ActorNetAnimation netAniamtion) { if (ActorList[netAniamtion.userIndex] == null) { return; } ActorList[netAniamtion.userIndex].MyModelInfo.animation = netAniamtion.animationIndex; byte[] message = SerializeHelper.ConvertToByte(netAniamtion.GetSendInfo()); BoardcastMessage(MessageConvention.updateActorAnimation, message, netAniamtion.userIndex); }
/// <summary> /// 请求房间中人物的信息 /// </summary> public static void GetRoommateInfo() { RoomActorUpdate roommateInfo = new RoomActorUpdate() { userIndex = DataController.instance.MyLocateIndex, update = DataController.instance.MyRoomInfo.RoomID.ToString() }; byte[] message = SerializeHelper.ConvertToByte(roommateInfo.GetSendInfo()); SocketManager.instance.SendSave((byte)MessageConvention.getRoommateInfo, message); }
public static void SendState(RoomActorState state) { RoomActorUpdate netUpdate = new RoomActorUpdate() { userIndex = DataController.instance.MyLocateIndex, update = (int)state + "" }; string info = netUpdate.GetSendInfo(); byte[] message = SerializeHelper.ConvertToByte(info); SocketManager.instance.SendSave((byte)MessageConvention.updateActorState, message, false); }
private void SendLoadProgress(int index) { //发送准备进度命令 RoomActorUpdate netUpdate = new RoomActorUpdate() { userIndex = DataController.instance.MyLocateIndex, update = index + "" }; string info = netUpdate.GetSendInfo(); byte[] message = SerializeHelper.ConvertToByte(info); SocketManager.instance.SendSave((byte)MessageConvention.prepareLocalModel, message, false); }
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"); } }
/// <summary> /// userToken只有一个MemberID能用 /// </summary> /// <param name="userToken"></param> public void ReConnect(AsyncUserToken userToken) { List <RoomActor> allRA = new List <RoomActor>(ActorList.Values); RoomActor actor = null; for (int i = 0; i < allRA.Count; i++) { if (allRA[i].Register.userID == userToken.userInfo.Register.userID) { actor = allRA[i]; userToken.userInfo = actor; userToken.userInfo.CurState = RoomActorState.Online; UserTokenInfo[userToken.userInfo.UniqueID] = userToken; break; } } //房间信息 MessageXieYi xieyi = new MessageXieYi((byte)MessageConvention.joinRoom, 0, SerializeHelper.ConvertToByte(actor.UniqueID + "")); AsyncIOCPServer.instance.SendSave(userToken, xieyi.ToBytes()); }
public void OnClickRename() { string name = inputName.text; inputName.text = ""; if (!string.IsNullOrEmpty(name)) { if (name.Length <= 6 * 2) { byte[] message = SerializeHelper.ConvertToByte(name); SocketManager.instance.SendSave((byte)MessageConvention.updateName, message); } else { UIManager.instance.ShowAlertTip("名称太长。"); } } else { UIManager.instance.ShowAlertTip("名称为空。"); } }
public void UpdateState(RoomActorUpdate roomActorUpdate) { int index = roomActorUpdate.userIndex; RoomActorState upState = (RoomActorState)int.Parse(roomActorUpdate.update); if (ActorList[index] == null) { return; } //if (ActorList[index].CurState != RoomActorState.ReConnect) { Log4Debug("站位 " + index + " 更新当前状态:" + ActorList[index].CurState + " -> " + (RoomActorState)int.Parse(roomActorUpdate.update)); ActorList[index].CurState = upState; byte[] message = SerializeHelper.ConvertToByte(roomActorUpdate.GetSendInfo()); BoardcastMessage(MessageConvention.updateActorState, message); if (CheckIsAllFixedState(RoomActorState.Ready)) { ChangeRoomState(RoomActorState.Ready); } if (CurState == RoomActorState.Gaming) { switch (ActorList[index].CurState) { case RoomActorState.ReConnect: break; case RoomActorState.WaitForStart: Log4Debug("模型未准备好的玩家准备好进入游戏了。"); string starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); byte[] start = SerializeHelper.ConvertToByte(starttime); MessageXieYi xieyi = new MessageXieYi((byte)MessageConvention.startGaming, 0, start); AsyncIOCPServer.instance.SendSave(UserTokenInfo[index], xieyi.ToBytes()); roomActorUpdate = new RoomActorUpdate() { userIndex = index, update = (int)RoomActorState.Gaming + "" }; UpdateState(roomActorUpdate); //广播,修改玩家状态用来准备本机数据 break; case RoomActorState.Dead: ActorList[index].timerDead = new Timer(new TimerCallback(SetAfterDead), index, RoomActor.DeadLastTime, 0); break; } } } //else//reConnect时修改状态 //{ // if (upState == RoomActorState.WaitForStart && RoomInfo.CurState == RoomActorState.Gaming) // { // ActorList[index].CurState = RoomActorState.Gaming; // roomActorUpdate.update = (int)ActorList[index].CurState + ""; // byte[] message = SerializeHelper.ConvertToByte(roomActorUpdate.GetSendInfo()); // BoardcastMessage(MessageConvention.updateActorState, message); // } // else // { // Log4Debug("想要在重连时更新状态:" + upState); // } //} }
public void ChangeRoomState(RoomActorState state) { byte[] message = new byte[] { }; RoomActorUpdate roomActorUpdate = new RoomActorUpdate(); Log4Debug("房间更改状态为:" + CurState + "->" + state); CurState = state; switch (CurState) { case RoomActorState.NoReady: foreach (var item in ActorList) { if (item.Value == null) { continue; } //初始化房间玩家部分信息 item.Value.InitActor(); //广播房间用户准备状态为未准备 roomActorUpdate = new RoomActorUpdate() { userIndex = item.Key, update = (int)item.Value.CurState + "" }; UpdateState(roomActorUpdate); } break; case RoomActorState.Ready: Log4Debug("玩家都准备了。"); //设置所有玩家默认值 foreach (var item in ActorList) { if (item.Value == null) { continue; } item.Value.MyModelInfo.pos = (NetVector3)GameTypeManager.BackStandPos(RoomInfo.RoomType, item.Key); item.Value.MyModelInfo.rotate = new NetVector3(0, GameTypeManager.BackLookAt(RoomInfo.RoomType, item.Key), 0); roomActorUpdate = new RoomActorUpdate() { userIndex = item.Key, update = (int)RoomActorState.PrepareModel + "" }; UpdateState(roomActorUpdate); //广播,修改玩家状态用来准备本机数据 } //方块初始化 BoxList = new ConcurrentDictionary <int, BoxInfo>(); //倒计时进入游戏 ChangeRoomState(RoomActorState.WaitForStart); break; case RoomActorState.WaitForStart: // Log4Debug("开始倒计时"); //时间初始化 PassedCountDownTime = 0; CountDownTimer = new Timer(new TimerCallback(GameCountDowning), null, 0, 1 * 1000); break; case RoomActorState.Gaming: Log4Debug("开始游戏:" + FrameIndex); foreach (var item in ActorList) { if (item.Value == null) { continue; } if (item.Value.CurState == RoomActorState.WaitForStart) { roomActorUpdate = new RoomActorUpdate() { userIndex = item.Key, update = (int)RoomActorState.Gaming + "" }; UpdateState(roomActorUpdate); //广播,修改玩家状态用来准备本机数据 } else { Log4Debug("用户:" + item.Value.Register.name + "在倒计时期间内未准备好模型。"); } } //保存帧同步 FrameIndex = 0; FrameCount = (int)(RoomInfo.GameTime / RoomInfo.frameTime); FrameGroup = new ConcurrentDictionary <int, FrameInfo>(); //FrameGroup = new Dictionary<int, FrameInfo>(); //for (int i = 0; i < FrameCount; i++) //{ // FrameGroup.Add(i, new FrameInfo() { frameIndex = i, frameData = new List<byte[]>() }); //} //线程池调用时间间隔逻辑 ThFrameCount = new Thread(GameFrameReconding); ThFrameCount.IsBackground = true; ThFrameCount.Start(); //ThreadPool.QueueUserWorkItem(new WaitCallback(GameFrameReconding), null); // string starttime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); byte[] start = SerializeHelper.ConvertToByte(starttime); BoardcastMessage(MessageConvention.startGaming, start); //发送游戏时间 PassedGameTime = 0; break; case RoomActorState.GameEnd: Log4Debug("退出计数"); TeamType winTeam = GetWinnerTeam(); Log4Debug("游戏结束" + winTeam + "胜利"); message = SerializeHelper.ConvertToByte((int)winTeam + ""); BoardcastMessage(MessageConvention.endGaming, message); // InitRoom(); break; } }
public static byte[] ErrorBackByType(ErrorType type) { return(SerializeHelper.ConvertToByte(ErrorSplit + (int)type)); }