private void OnBeginBC(GM_Begin recvData) { if (recvData.result == 0) { Debug.Log("Server frame begin"); mCurrentFrame = 1; mBegin = true; mFrameTime = 0; mTickThread = new Thread(Tick); mTickThread.Start(); EventDispatch.Dispatch(EventID.Begin_Broadcast, mBegin); CreateMonster(); } else { if (Debuger.ENABLELOG) { Debug.Log("Start result=" + recvData.result); } } }
/// <summary> /// 收到准备后的处理 /// </summary> /// <param name="client"></param> /// <param name="recvData"></param> private void OnReceiveReady(Session client, GM_Ready recvData) { if (mBegin) { //游戏已经开始,不能中途进入游戏,后面再这里加断线重连逻辑看看 return; } if (recvData == null || client == null) { return; } int readyCount = 0; for (int i = 0; i < mUserList.Count; ++i) { var user = mUserList[i]; if (recvData.roleId == user.roleid && client == user.client) { user.SetReady(); } BroadCast(MessageID.GM_READY_BC, recvData, true); //广播玩家准备(包括自己) //BroadCast(MessageID.GM_BEGIN_BC, recvData, true); //user.SendTcp(MessageID.GM_READY_BC, recvData); if (user.ready) { readyCount++; } } Debug.Log(string.Format("{0} roleid={1} ready, ready count={2} user count={3}", client.id, recvData.roleId, readyCount, mUserList.Count), ConsoleColor.Blue); if (mBegin == false) { //所有的玩家都准备好了,可以开始同步 if (readyCount == 2) //if (readyCount >= mUserList.Count) { GM_Begin sendData = new GM_Begin(); sendData.roleIdList = new List <int>(); sendData.randSeed = 12345; for (int i = 0; i < mUserList.Count; ++i) { if (mUserList[i].ready) { sendData.roleIdList.Add(mUserList[i].roleid); } var user = mUserList[i]; GM_Ready gm_Ready = new GM_Ready(); gm_Ready.roleId = user.roleid; //if (recvData.roleId == user.roleid && client == user.client) //{ // user.position = ProtoTransfer.Get(recvData.position); // user.direction = ProtoTransfer.Get(recvData.direction); // user.SetReady(); //} //广播玩家准备(包括自己) //user.SendTcp(MessageID.GM_READY_BC, gm_Ready); //if (user.ready) //{ // readyCount++; //} } mFrameDic = new Dictionary <long, Dictionary <int, List <Command> > >(); //GM_Begin sendData = new GM_Begin(); //sendData.result = 0; BroadCast(MessageID.GM_BEGIN_BC, sendData, true); //BroadCast(MessageID.GM_BEGIN_BC, sendData, true); BeginGame(); } } else //断线重连 { //User user = GetUser(recvData.roleId); //if(user!=null) //{ // GM_Begin sendData = new GM_Begin(); // user.SendTcp(MessageID.GM_BEGIN_BC, sendData); // /* // GM_Frame_BC frameData = new GM_Frame_BC(); // //给他发送当前帧之前的数据 // for (long frame = 1; frame < mCurrentFrame - 1; ++frame) // { // if (mFrameDic.ContainsKey(frame)) // { // frameData.frame = frame; // frameData.frametime = 0; // var it = mFrameDic[frame].GetEnumerator(); // while (it.MoveNext()) // { // for (int i = 0, count = it.Current.Value.Count; i < count; ++i) // { // GMCommand cmd = ProtoTransfer.Get(it.Current.Value[i]); // frameData.command.Add(cmd); // } // } // user.SendUdp(MessageID.GM_FRAME_BC, frameData); // } // } // */ //} } }
private void OnReceiveReady(Session client, GM_Ready recvData) { if (recvData == null || client == null) { return; } int readyCount = 0; for (int i = 0; i < mUserList.Count; ++i) { var user = mUserList[i]; if (recvData.roleId == user.roleid && client == user.client) { user.position = ProtoTransfer.Get(recvData.position); user.direction = ProtoTransfer.Get(recvData.direction); user.SetReady(); } //广播玩家准备(包括自己) user.SendUdp(MessageID.GM_READY_BC, recvData); if (user.ready) { readyCount++; } } Debug.Log(string.Format("{0} roleid={1} ready, ready count={2} user count={3}", client.id, recvData.roleId, readyCount, mUserList.Count), ConsoleColor.Blue); if (mBegin == false) { //所有的玩家都准备好了,可以开始同步 if (readyCount >= mUserList.Count) { mFrameDic = new Dictionary <long, Dictionary <int, List <Command> > >(); GM_Begin sendData = new GM_Begin(); sendData.result = 0; BroadCast(MessageID.GM_BEGIN_BC, sendData, true); BeginGame(); } } else //断线重连 { User user = GetUser(recvData.roleId); if (user != null) { GM_Begin sendData = new GM_Begin(); sendData.result = 0; user.SendUdp(MessageID.GM_BEGIN_BC, sendData); /* * GM_Frame_BC frameData = new GM_Frame_BC(); * * //给他发送当前帧之前的数据 * for (long frame = 1; frame < mCurrentFrame - 1; ++frame) * { * if (mFrameDic.ContainsKey(frame)) * { * frameData.frame = frame; * frameData.frametime = 0; * var it = mFrameDic[frame].GetEnumerator(); * while (it.MoveNext()) * { * for (int i = 0, count = it.Current.Value.Count; i < count; ++i) * { * GMCommand cmd = ProtoTransfer.Get(it.Current.Value[i]); * * frameData.command.Add(cmd); * } * } * user.SendUdp(MessageID.GM_FRAME_BC, frameData); * } * } */ } } }