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); }
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); }
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); }
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); }
//服务器端向客户端直接发起的请求、通知 (事件分发器) 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); }
/// <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); }
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); }
//获取客户端位置请求的处理的代码 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); // 发送事件 } } }
// 登陆请求的处理的代码 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); }
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); }
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); }
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); }
//有用户退出时销毁用户,并从管理类中移除 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; //} }
//客户端请求 服务端的回复 public void OnOperationResponse(OperationResponse operationResponse) { OperationCode opCode = (OperationCode)operationResponse.OperationCode; Request request = DictTool.GetValue <OperationCode, Request>(m_requestDic, opCode); request.OnOperationResponse(operationResponse); }
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; //} }
void OnSyncPlayerReceived(EventData eventData) { string username = (string)DictTool.GetValue <byte, object>(eventData.Parameters, 1); Debug.Log(username); GameObject.FindGameObjectWithTag("Player").GetComponent <Player>().OnNewPlayerEvent(username); }
//服务器主动发送的事件 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); }