Example #1
0
    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 + ")");
        }
    }
Example #2
0
    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);
        }
    }
Example #3
0
    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);
    }
Example #4
0
    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);
        //
    }
Example #5
0
    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);
        //
    }
Example #6
0
 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);
 }
Example #7
0
    /// <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);
    }
Example #8
0
    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);
    }
Example #9
0
    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);
    }
Example #10
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");
        }
    }
Example #11
0
    /// <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());
    }
Example #12
0
    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("名称为空。");
        }
    }
Example #13
0
    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);
        //    }
        //}
    }
Example #14
0
    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;
        }
    }
Example #15
0
 public static byte[] ErrorBackByType(ErrorType type)
 {
     return(SerializeHelper.ConvertToByte(ErrorSplit + (int)type));
 }