Exemple #1
0
        //发送给客户端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());
        }
Exemple #2
0
        //发起组队
        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;
            }
        }
Exemple #5
0
        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;
            }
        }
Exemple #6
0
        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;
            }
        }