//发送给客户端masterId public void SendMasterIdToPeer(ClientPeer peer, OperationCode opCode, SubCode subCode, int masterRoleId, List <Role> roleList) { EventData data = new EventData(); data.Parameters = new Dictionary <byte, object>(); ParameterTool.AddOperationCode(data.Parameters, opCode); ParameterTool.AddSubCode(data.Parameters, subCode); ParameterTool.AddParameter(data.Parameters, ParameterCode.MasterRoleId, masterRoleId, false); ParameterTool.AddParameter(data.Parameters, ParameterCode.RoleList, roleList); peer.SendEvent(data, new SendParameters()); }
//发起组队 void SendEventByPeer(ClientPeer peer, OperationCode opCode, SubCode subcode, List <Role> rolelist, int masterRoleID) { EventData eventData = new EventData(); eventData.Parameters = new Dictionary <byte, object>(); ParameterTool.AddParameter(eventData.Parameters, ParameterCode.OperationCode, opCode, false); ParameterTool.AddParameter(eventData.Parameters, ParameterCode.MasterRoleID, masterRoleID, false); ParameterTool.AddParameter(eventData.Parameters, ParameterCode.RoleList, rolelist); ParameterTool.AddSubCode(eventData.Parameters, subcode); peer.SendEvent(eventData, new SendParameters()); }
public override void OnHandlerMessage(OperationRequest request, OperationResponse response, ClientPeer peer, SendParameters sendParameters) { SubCode subcode = ParameterTool.GetSubCode(request.Parameters); ParameterTool.AddSubCode(response.Parameters, subcode); switch (subcode) { case SubCode.AddSkillDB: SkillDB skilldb = ParameterTool.GetParameter <SkillDB>(request.Parameters, ParameterCode.SkillDB); skilldb.Role = peer.LoginRole; skilldbManager.AddSkillDB(skilldb); skilldb.Role = null; ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDB, skilldb); break; case SubCode.GetSkillDBList: List <SkillDB> list = skilldbManager.Get(peer.LoginRole); foreach (var temp in list) { temp.Role = null; } ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDBList, list); break; case SubCode.UpdateSkillDB: SkillDB skilldb1 = ParameterTool.GetParameter <SkillDB>(request.Parameters, ParameterCode.SkillDB); skilldb1.Role = peer.LoginRole; skilldbManager.UpdateSkillDB(skilldb1); break; case SubCode.UpgradeSkillDB: SkillDB skilldb2 = ParameterTool.GetParameter <SkillDB>(request.Parameters, ParameterCode.SkillDB); Role role = ParameterTool.GetParameter <Role>(request.Parameters, ParameterCode.Role); role.User = peer.LoginUser; skilldb2.Role = role; skilldbManager.UpgradeSkillDB(skilldb2, role); skilldb2.Role = null; ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDB, skilldb2); break; } }
public override void OnHandlerMessage(OperationRequest request, OperationResponse response, ClientPeer peer) { SubCode subCode = ParameterTool.GetSubCode(request.Parameters); ParameterTool.AddSubCode(response.Parameters, subCode); switch (subCode) { case SubCode.GetSkillDBList: List <SkillDB> listGet = manager.GetSkillDBList(peer.LoginRole); foreach (var temp in listGet) { temp.Role = null; } ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDBList, listGet); break; case SubCode.AddSkillDB: SkillDB skillAdd = ParameterTool.GetParameter <SkillDB>(request.Parameters, ParameterCode.SkillDB); Role roleAdd = ParameterTool.GetParameter <Role>(request.Parameters, ParameterCode.Role); roleAdd.User = peer.LoginUser; peer.LoginRole = roleAdd; skillAdd.Role = roleAdd; manager.AddSkill(skillAdd, roleAdd); skillAdd.Role = null; ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDB, skillAdd); break; case SubCode.UpgradeSkillDB: SkillDB skillUpgrade = ParameterTool.GetParameter <SkillDB>(request.Parameters, ParameterCode.SkillDB); Role roleUpgrade = ParameterTool.GetParameter <Role>(request.Parameters, ParameterCode.Role); roleUpgrade.User = peer.LoginUser; peer.LoginRole = roleUpgrade; skillUpgrade.Role = roleUpgrade; manager.UpgradeSkill(skillUpgrade, roleUpgrade); skillUpgrade.Role = null; ParameterTool.AddParameter(response.Parameters, ParameterCode.SkillDB, skillUpgrade); break; } }
public override void OnHandlerMessage(OperationRequest request, OperationResponse response, ClientPeer peer, SendParameters sendParameters) { SubCode subcode = ParameterTool.GetSubCode(request.Parameters); ParameterTool.AddSubCode(response.Parameters, subcode); switch (subcode) { case SubCode.SendTeam: if (TaidouServer.Instance.clientPeersForTeam.Count >= 1) { //取得集合中的前两个peer,和当前的peer进行组队 ClientPeer peer1 = TaidouServer.Instance.clientPeersForTeam[0]; Team t = new Team(peer1, peer); TaidouServer.Instance.clientPeersForTeam.RemoveRange(0, 1); List <Role> rolelist = new List <Role>(); foreach (var clientPeer in t.ClientPeers) { rolelist.Add(clientPeer.LoginRole); } ParameterTool.AddParameter(response.Parameters, ParameterCode.RoleList, rolelist); ParameterTool.AddParameter(response.Parameters, ParameterCode.MasterRoleID, t.masterRoleID, false); response.ReturnCode = (short)ReturnCode.GetTeam; SendEventByPeer(peer1, (OperationCode)response.OperationCode, SubCode.GetTeam, rolelist, t.masterRoleID); } else { //当前客户端人数不足的时候,把自身加载进来等待组队 TaidouServer.Instance.clientPeersForTeam.Add(peer); response.ReturnCode = (short)ReturnCode.WaitTeam; } break; case SubCode.CancelTeam: TaidouServer.Instance.clientPeersForTeam.Remove(peer); response.ReturnCode = (short)ReturnCode.Success; break; case SubCode.SyncPositionAndRotation: object objPos = null; request.Parameters.TryGetValue((byte)ParameterCode.Position, out objPos); object objEulerAngle = null; request.Parameters.TryGetValue((byte)ParameterCode.EulerAngles, out objEulerAngle); foreach (ClientPeer temp in peer.Team.ClientPeers) { //向其余的客户端发送请求 if (temp != peer) { SendPositionAndRotation(temp, OpCode, SubCode.SyncPositionAndRotation, peer.LoginRole.ID, objPos, objEulerAngle); } } break; case SubCode.SyncPlayerMoveAnimation: RequestTool.TransmitRequest(peer, request, OpCode); break; case SubCode.SyncPlayerAnimation: RequestTool.TransmitRequest(peer, request, OpCode); break; } }
public override void OnHandlerMessage(OperationRequest request, OperationResponse response, ClientPeer peer) { SubCode subCode = ParameterTool.GetSubCode(request.Parameters); ParameterTool.AddSubCode(response.Parameters, subCode); switch (subCode) { case SubCode.TeamFight: if (GodApplication.Instance.peerListForTeam.Count >= 2) //三个人可以组队 { //取得待组队list中的前两个peer和当前的peer组队 ClientPeer peer1 = GodApplication.Instance.peerListForTeam[0]; ClientPeer peer2 = GodApplication.Instance.peerListForTeam[1]; Team team = new Team(peer1, peer2, peer); GodApplication.Instance.peerListForTeam.RemoveRange(0, 2); //将0 1 2号peer移出待组队集合 List <Role> roleList = new List <Role>(); foreach (var clientPeer in team.clientPeers) { roleList.Add(clientPeer.LoginRole); } ParameterTool.AddParameter(response.Parameters, ParameterCode.RoleList, roleList); ParameterTool.AddParameter(response.Parameters, ParameterCode.MasterRoleId, team.masterRoleId, false); response.ReturnCode = (short)ReturnCode.HavingTeam; SendMasterIdToPeer(peer1, (OperationCode)request.OperationCode, SubCode.ConfirmTeam, team.masterRoleId, roleList); SendMasterIdToPeer(peer2, (OperationCode)request.OperationCode, SubCode.ConfirmTeam, team.masterRoleId, roleList); } else //不足三人 { //当前服务器可供组队的客户端不足的时候,将自身添加到集合中等待组队 GodApplication.Instance.peerListForTeam.Add(peer); response.ReturnCode = (short)ReturnCode.WaitingTeam; } break; case SubCode.CancelTeam: GodApplication.Instance.peerListForTeam.Remove(peer); response.ReturnCode = (short)ReturnCode.Success; break; case SubCode.SyncPositionAndRotation: object position = null; request.Parameters.TryGetValue((byte)ParameterCode.Position, out position); object eulerAngles = null; request.Parameters.TryGetValue((byte)ParameterCode.EulerAngles, out eulerAngles); foreach (var peerTemp in peer.Team.clientPeers) { if (peerTemp != peer) //其他客户端需要同步 { SendPositionAndRotationToPeer(peerTemp, (OperationCode)request.OperationCode, SubCode.SyncPositionAndRotation, peer.LoginRole.Id, position, eulerAngles); } } break; case SubCode.SyncMoveAnimation: foreach (var peerTemp in peer.Team.clientPeers) { if (peerTemp != peer) //其他客户端需要同步 { SendMoveAnimationToPeer(peerTemp, (OperationCode)request.OperationCode, SubCode.SyncAnimation, peer.LoginRole.Id, request.Parameters); } } break; case SubCode.SyncAnimation: request.Parameters.Add((byte)ParameterCode.RoleId, peer.LoginRole.Id); RequestTool.TransmitRequest(peer, request, opCode, subCode); break; case SubCode.SyncGameState: RequestTool.TransmitRequest(peer, request, opCode, subCode); peer.Team.Dismiss(); //解散队伍 break; } }