Beispiel #1
0
        private void SendPosition()
        {
            PlayerList playerList = new PlayerList();

            foreach (ClientPeer peer in MyGameServer.Instance.peerList)
            {
                if (!string.IsNullOrEmpty(peer.userName) && peer.posData != null)
                {
                    PlayerData playerData = new PlayerData();
                    playerData.UsrName = peer.userName;
                    playerData.Pos     = new VectorData()
                    {
                        X = peer.posData.X, Y = peer.posData.Y, Z = peer.posData.Z
                    };
                    playerList.PlayerList_.Add(playerData);
                }
            }

            //MyGameServer.LogInfo("playerList = " + playerList.ToString());

            Dictionary <byte, object> data = DictTool.GetDtoDataByProto(playerList, ParameterCode.PlayerDataList);

            foreach (ClientPeer peer in MyGameServer.Instance.peerList)
            {
                if (!string.IsNullOrEmpty(peer.userName))
                {
                    EventData ed = new EventData((byte)EventCode.SyncPosition);
                    ed.Parameters = data;
                    //MyGameServer.LogInfo("peer.SendEvent userName = " + peer.userName);
                    peer.SendEvent(ed, new SendParameters());
                }
            }
        }
    public override void OnEvent(EventData eventData)
    {
        string username = (string)DictTool.GetValue <byte, object>(eventData.Parameters, (byte)ParameterCode.Name);

        //调用用户对象中的方法创建游戏物体
        player.OnNewPlayerEvent(username);
    }
Beispiel #3
0
    public override void OnOperationResponse(OperationResponse operationResponse)
    {
        var           restr = (string)DictTool.GetValue <byte, object>(operationResponse.Parameters, (byte)ParameterCode.OnlineUserNameList);
        List <string> onlineUserNameList = JsonMapper.ToObject <List <string> >(restr);

        player.OnSyncPlayerResponse(onlineUserNameList);
    }
Beispiel #4
0
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer clientPeer)
        {
            //从客户端发来的数据包中提取数据
            string account  = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)UserCode.Account) as string;
            string password = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)UserCode.password) as string;
            //从数据库中验证数据
            UserManager userManager = new UserManager();
            //这里暂时只验证账号密码是否完全正确,其他情况另行补充
            bool isSuccess = userManager.VerifyUser(account, password);


            //将结果打包,准备发给客户端
            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            if (isSuccess)
            {
                response.ReturnCode = (short)LoginCode.Success;
            }
            else
            {
                response.ReturnCode = (short)LoginCode.PasswordError;
            }

            clientPeer.SendOperationResponse(response, sendParameters);
        }
Beispiel #5
0
    public override void OnOperationResponse(OperationResponse operationResponse)
    {
        byte[]        SyncPlayerListBytes = (byte[])DictTool.GetValue(operationResponse.Parameters, (byte)ParameterCode.SyncPlayerList);
        List <string> usernameDict        = ProtobufTool.Deserialize <List <string> >(SyncPlayerListBytes);

        player.OnSyncPlayer(usernameDict);
    }
Beispiel #6
0
    //服务器端向客户端直接发起的请求、通知   (事件分发器)
    public void OnEvent(EventData eventData)
    {
        EventCode code      = (EventCode)eventData.Code;
        BaseEvent baseEvent = DictTool.GetValue <EventCode, BaseEvent>(EventDict, code);

        baseEvent.OnEvent(eventData);
    }
        /// <summary>
        /// 客户端发送注册请求的处理
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyClient peer)
        {
            string username = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Name) as string;
            string password = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Pwd) as string;

            UserManager       userManager = new UserManager();
            User              user        = userManager.GetByName(username);
            OperationResponse response    = new OperationResponse(operationRequest.OperationCode);

            if (user != null)
            {
                //用户存在
                response.ReturnCode = (short)ReturnCode.Failed;
            }
            else
            {
                //用户不存在
                user = new User()
                {
                    Name = username, Pwd = password
                };
                userManager.Add(user);
                response.ReturnCode = (short)ReturnCode.Success;
            }
            peer.SendOperationResponse(response, sendParameters);
        }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters,
                                                ClientPeer peer)
        {
            //利用工具类从获取客户端上传的参数
            var username =
                DictTool.GetValue(operationRequest.Parameters, (byte)ParameterCode.UserName) as string;
            var password =
                DictTool.GetValue(operationRequest.Parameters, (byte)ParameterCode.Password) as string;

            //数据库管理类
            var userManager = new UserManager();

            //检测用户名和密码是否正确
            var isOk = userManager.VerifyModel(username, password);

            //返回给客户端数据
            var response = new OperationResponse(operationRequest.OperationCode);

            if (isOk)
            {
                response.ReturnCode = (short)ReturnCode.Success;

                peer.username = username;
            }
            else
            {
                response.ReturnCode = (short)ReturnCode.Failed;
            }


            //给客户端响应
            peer.SendOperationResponse(response, sendParameters);
        }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer)
        {
            VectorData pos = DictTool.GetProtoByDtoData <VectorData>(operationRequest.Parameters, ParameterCode.Position);

            //MyGameServer.LogInfo("x = "+ pos.X + "y= " + pos.Y + "z = " + pos.Z);
            peer.posData = pos;
        }
        //响应前端请求
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            MyGameServer.log.Info("Client---请求了---" + operationRequest.OperationCode);

            //首先获取客户端传来的code (operationRequest.OperationCode)
            //然后根据code 去 MyGameServer中获取注册的Handler。
            //Handler我们注册到了主函数HandlerDict中。
            //DictTool工具类是我们自己定义的,方便传入key,就能从Dict中取值,这里取出的是code相对应的handler
            var handler = DictTool.GetValue(MyGameServer.Instance.HandlerDict,
                                            (OperationCode)operationRequest.OperationCode);

            if (handler != null)
            {
                //找到相应的Handler,直接调用 OnOperationRequest 进行相应逻辑处理
                handler.OnOperationRequest(operationRequest, sendParameters, this);
            }
            else
            {
                //如果没有找到,返回我们自定义的 DefaultHandler.
                var defHander = DictTool.GetValue(MyGameServer.Instance.HandlerDict,
                                                  OperationCode.Default);

                defHander.OnOperationRequest(operationRequest, sendParameters, this);
            }
        }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer)
        {
            RegisterData registerData = DictTool.GetProtoByDtoData <RegisterData>(operationRequest.Parameters, ParameterCode.RegisterData);

            UserManager manager = new UserManager();
            User        user    = manager.GetByName(registerData.UserName);

            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            if (user == null)
            {
                user = new User()
                {
                    Username = registerData.UserName, Password = registerData.PassWord
                };
                manager.Add(user);
                response.ReturnCode = (short)ReturnCode.Success;
            }
            else
            {
                response.ReturnCode = (short)ReturnCode.Failed;
            }

            peer.SendOperationResponse(response, sendParameters);
        }
Beispiel #12
0
        /// <summary>
        /// 收到玩家加入消息
        /// </summary>
        /// <param name="response"></param>
        void OnSyncAddPlayerReceived(OperationResponse response)
        {
            byte[]       bytes     = (byte[])DictTool.GetValue <byte, object>(response.Parameters, 1);
            AddPlayerS2C playerS2C = BinSerializer.DeSerialize <AddPlayerS2C>(bytes);

            BattleSyncMgr.Instance.OnSyncPlayerResponse(playerS2C.dataList);
        }
Beispiel #13
0
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            //Dictionary<byte, object> data = operationRequest.Parameters;
            //Object intvalue;
            //Object stringvalue;
            //data.TryGetValue(1, out intvalue);
            //data.TryGetValue(2, out stringvalue);
            //MyServer.Log.Info("得到请求的数据" + intvalue.ToString() + "," + stringvalue.ToString());
            //Dictionary<byte, object> responsedata = new Dictionary<byte, object>();
            //responsedata.Add(1, (int)intvalue + 111);
            //responsedata.Add(2, stringvalue.ToString() + "加上服务器响应");
            //OperationResponse operationresponse = new OperationResponse(1);
            //operationresponse.Parameters = responsedata;
            //SendOperationResponse(operationresponse, sendParameters);

            //Dictionary<byte, object> data2 = new Dictionary<byte, object>();
            //data2.Add(1, (int)intvalue + 100000);
            //data2.Add(2, stringvalue.ToString() + "加上事件的数据");
            //EventData eventdata = new EventData(1, data2);
            //SendEvent(eventdata, new SendParameters());
            BaseHandler handler = DictTool.GetValue(MyServer.Instance.HandlerDict, (OperationCode)operationRequest.OperationCode);

            if (handler != default(BaseHandler))
            {
                handler.OnOperationRequest(operationRequest, sendParameters, this);
            }
            else
            {
                handler = DictTool.GetValue(MyServer.Instance.HandlerDict, OperationCode.Default);
                handler.OnOperationRequest(operationRequest, sendParameters, this);
            }
        }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, MyClientPeer peer)
        {
            string username = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Username) as string;
            string password = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Password) as string;

            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            UserManager userManager = new UserManager();
            User        user        = userManager.GetByUserName(username);

            //没有重复的username
            if (user == null)
            {
                User usertemp = new User()
                {
                    Username = username, Password = password
                };
                userManager.Add(usertemp);
                response.ReturnCode = (short)Common.ReturnCode.Success;
            }
            else
            {
                response.ReturnCode = (short)Common.ReturnCode.Fail;
            }

            peer.SendOperationResponse(response, sendParameters);
        }
Beispiel #15
0
        //获取客户端位置请求的处理的代码
        public void OnSyncTransitionReceived(Client peer, OperationRequest operationRequest, SendParameters sendParameters)
        {
            //接收位置并保持起来
            byte[]   bytes = (byte[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 1);
            object[] objs  = (object[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 2);
            ProtoData.SyncTransitionC2S syncTransitionC2S = BinSerializer.DeSerialize <ProtoData.SyncTransitionC2S>(bytes);

            ProtoData.SyncTransitionS2C syncTransitionS2C = new ProtoData.SyncTransitionS2C();
            syncTransitionS2C.username         = peer.playerData.username;
            syncTransitionS2C.targetTransition = syncTransitionC2S.targetTransition;
            byte[] bytes2 = BinSerializer.Serialize(syncTransitionS2C);

            // 告诉其它客户端 当前客户端改变的动作
            foreach (Client tempPeer in ClientMgr.Instance.BattlePeerList)
            {
                if (!string.IsNullOrEmpty(tempPeer.playerData.username) && tempPeer != peer)
                {
                    EventData ed = new EventData((byte)MessageCode.SyncTransition);
                    Dictionary <byte, object> data = new Dictionary <byte, object>();
                    data.Add(1, bytes2);
                    data.Add(2, objs);
                    ed.Parameters = data;
                    tempPeer.SendEvent(ed, sendParameters); // 发送事件
                }
            }
        }
Beispiel #16
0
        // 登陆请求的处理的代码
        void OnLoginReceived(Client peer, OperationRequest operationRequest, SendParameters sendParameters)
        {
            //根据发送过来的请求获得用户名和密码
            byte[]             bytes    = DictTool.GetValue <byte, object>(operationRequest.Parameters, 1) as byte[];
            ProtoData.LoginC2S loginC2S = BinSerializer.DeSerialize <ProtoData.LoginC2S>(bytes);

            //连接数据库进行校验
            UserManager       manager   = new UserManager();
            bool              isSuccess = manager.VerifyUser(loginC2S.username, loginC2S.password);
            OperationResponse response  = new OperationResponse(operationRequest.OperationCode);

            //如果验证成功,把成功的结果利用response.ReturnCode返回成功给客户端
            if (isSuccess)
            {
                response.ReturnCode      = (short)ReturnCode.Success;
                peer.playerData.username = loginC2S.username;
            }
            else//否则返回失败给客户端
            {
                response.ReturnCode = (short)ReturnCode.Failed;
            }

            ProtoData.LoginS2C loginS2C = new ProtoData.LoginS2C();
            loginS2C.username   = loginC2S.username;
            response.Parameters = new Dictionary <byte, object>();
            response.Parameters.Add(1, BinSerializer.Serialize(loginS2C));
            //把上面的回应给客户端
            peer.SendOperationResponse(response, sendParameters);
        }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer clientPeer)
        {
            //获得传递过来的参数,通过ParameterCode获得参数
            string username = (string)DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Username);
            string password = (string)DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Password);

            //使用Manager进行数据库的操作
            IUserInfoManager userManager = new UserInfoManager();

            UserInfo userinfo = new UserInfo()
            {
                Username = username, Password = password, RegistDate = DateTime.Now
            };
            //添加用户
            bool result = userManager.Add(userinfo);

            //响应客户端
            Dictionary <byte, object> respData = new Dictionary <byte, object>();

            respData.Add((byte)ParameterCode.RegistResult, result);

            OperationResponse op = new OperationResponse(operationRequest.OperationCode, respData);

            clientPeer.SendOperationResponse(op, sendParameters);
        }
Beispiel #18
0
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer)
        {
            string            username  = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Username) as string;
            string            password  = DictTool.GetValue <byte, object>(operationRequest.Parameters, (byte)ParameterCode.Password) as string;
            UserManager       manager   = new UserManager();
            User              user      = manager.GetByUsername(username);//根据username查询数据
            OperationResponse responser = new OperationResponse(operationRequest.OperationCode);

            //如果没有查询到代表这个用户没被注册过可用
            if (user == null)
            {
                //添加输入的用户和密码进数据库
                user = new User()
                {
                    Username = username, Password = password
                };
                manager.Add(user);
                responser.ReturnCode = (short)ReturnCode.Success;//返回成功
            }
            else//否者这个用户被注册了
            {
                responser.ReturnCode = (short)ReturnCode.Failed;//返回失败
            }
            // 把上面的结果给客户端
            peer.SendOperationResponse(responser, sendParameters);
        }
    public override void OnEvent(EventData eventData)
    {
        try
        {
            clone        = GameObject.FindWithTag("OtherPlayer").GetComponent <MundoClone>();
            spriteslider = GameObject.FindWithTag("UI").GetComponent <Spriteslider>();
        }
        catch
        {
        }

        string     playerDataString = (string)DictTool.GteValue <byte, object>(eventData.Parameters, (byte)ParameterCode.PlayData);
        PlayerData playerData;

        using (StringReader reader = new StringReader(playerDataString))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(PlayerData));
            playerData = (PlayerData)serializer.Deserialize(reader);
        }

        Vector3 pos = new Vector3()
        {
            x = playerData.Pos.x, y = playerData.Pos.y, z = playerData.Pos.z
        };
        Quaternion rot = new Quaternion()
        {
            x = playerData.Rot.x, y = playerData.Rot.y, z = playerData.Rot.z, w = playerData.Rot.w
        };
        short aniSet = playerData.AniSet;
        float hp     = playerData.Hp;

        clone.TransformSet(pos, rot, aniSet);
        spriteslider.OtherHpSet(hp);
    }
Beispiel #20
0
    public override void OnOperationResponse(OperationResponse operationResponse)
    {
        //string resString = (string)DictTool.GetValue<byte, object>(operationResponse.Parameters, (byte)ParameterCode.UserNameList);
        //Debug.Log("resString = " + resString);

        //using (StringReader reader = new StringReader(resString))
        //{
        //    XmlSerializer serializer = new XmlSerializer(typeof(List<string>));
        //    List<string> userNameList = (List<string>)serializer.Deserialize(reader);

        //    for (int i = 0; i < userNameList.Count; i++)
        //    {
        //        Debug.Log("userName ="******"userName =" + userNameList.NameList[i]);
        }
        player.OnSyncPlayResponse(userNameList);
    }
Beispiel #21
0
    public override void OnEvent(EventData eventData)
    {
        string            playerDataListStr = (string)DictTool.GetValue <byte, object>(eventData.Parameters, (byte)ParameterCode.PlayerDataList);
        List <PlayerData> playerDataList    = JsonMapper.ToObject <List <PlayerData> >(playerDataListStr);

        player.OnSyncPositionEvent(playerDataList);
    }
Beispiel #22
0
    //有用户退出时销毁用户,并从管理类中移除
    public void OnClosePlayer(string name)
    {
        GameObject CloseP = DictTool.GetValue(playerDic, name);

        Destroy(CloseP);
        playerDic.Remove(name);
    }
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ClientPeer peer)
        {
            string username = DictTool.GetValue(operationRequest.Parameters, (byte)ParamererCode.Username) as string;
            string password = DictTool.GetValue(operationRequest.Parameters, (byte)ParamererCode.Password) as string;
//            MyGameServer.Log.Info(username+"  "+password);

            UserManager userManger = new UserManager();
            bool        isExit     = userManger.VerifyUser(username, password);

//            MyGameServer.Log.Info(isExit);

            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            if (isExit)
            {
                response.ReturnCode = (short)ReturenCode.Success;
                peer.Username       = username;
            }
            else
            {
                response.ReturnCode = (short)ReturenCode.Failed;
            }

            peer.SendOperationResponse(response, sendParameters);
        }
    public override void OnEvent(EventData eventData)
    {
        string userName = DictTool.GetValue <byte, object>(eventData.Parameters, (byte)ParameterCode.Username) as string;

        Debug.Log("OnEvent userName = " + userName);
        m_player.OnNewPlayerEvent(userName);
    }
        //处理客户端的请求
        protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
        {
            BaseHandler handler = DictTool.GetValue <OperationCode, BaseHandler>(GameServer.Instance.HandlerDict, (OperationCode)operationRequest.OperationCode);

            if (handler != null)
            {
                handler.OnOperationRequest(operationRequest, sendParameters, this);
            }
            else
            {
                BaseHandler defaultHandler = DictTool.GetValue <OperationCode, BaseHandler>(GameServer.Instance.HandlerDict, OperationCode.Default);
                defaultHandler.OnOperationRequest(operationRequest, sendParameters, this);
            }
            //switch ((RequestCode)operationRequest.OperationCode)//要是code不在枚举范围内呢?应该用const int?
            //{
            //    case RequestCode.Test:
            //        {
            //            GameServer.log.Info("接收到数据:" + operationRequest.Parameters[1]);
            //            OperationResponse opResponse = new OperationResponse((int)RequestCode.Test, operationRequest.Parameters);
            //            SendOperationResponse(opResponse, sendParameters);//该方法仅能在该函数中调用

            //            EventData eData = new EventData(1, operationRequest.Parameters);
            //            SendEvent(eData, new SendParameters());//可以在该类中任意地方调用,服务端主动通知客户端
            //        }
            //        break;
            //    default: break;
            //}
        }
Beispiel #26
0
    //客户端请求  服务端的回复
    public void OnOperationResponse(OperationResponse operationResponse)
    {
        OperationCode opCode  = (OperationCode)operationResponse.OperationCode;
        Request       request = DictTool.GetValue <OperationCode, Request>(m_requestDic, opCode);

        request.OnOperationResponse(operationResponse);
    }
Beispiel #27
0
        public void OnEvent(EventData eventData)
        {
            EventCode code         = (EventCode)eventData.Code;
            EventBase eventHnadler = DictTool.GetValue <EventCode, EventBase>(dic_Event, code);

            eventHnadler.OnEvent(eventData);

            //switch (eventData.Code)
            //{
            //    case 1:
            //        Dictionary<byte, object> data = eventData.Parameters;
            //        object intValue;
            //        data.TryGetValue(5, out intValue);
            //        object stringValue;
            //        data.TryGetValue(6, out stringValue);
            //        Debug.Log(string.Format("[Peer]<5,{0}>,<6,{1}>", intValue, stringValue));
            //        break;

            //    case 2:
            //        break;

            //    default:
            //        break;
            //}
        }
Beispiel #28
0
        void OnSyncPlayerReceived(EventData eventData)
        {
            string username = (string)DictTool.GetValue <byte, object>(eventData.Parameters, 1);

            Debug.Log(username);

            GameObject.FindGameObjectWithTag("Player").GetComponent <Player>().OnNewPlayerEvent(username);
        }
Beispiel #29
0
    //服务器主动发送的事件
    public void OnEvent(EventData eventData)
    {
        EventCode opCode    = (EventCode)eventData.Code;
        BaseEvent baseEvent = DictTool.GetValue <EventCode, BaseEvent>(m_eventDic, opCode);

        Debug.Log("opCode:" + opCode);
        baseEvent.OnEvent(eventData);
    }
    public override void OnOperationResponse(OperationResponse response)
    {
        String userNameListXML = DictTool.GetValue <byte, object>(response.Parameters, (byte)ParameterCode.UsernameList) as String;
        //反序列化
        List <string> usernameList = XML.Serializer <List <string> >(userNameListXML);

        m_player.OnSyncPlayerResopnse(usernameList);
    }