// 登陆请求的处理的代码 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); }
/// <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); }
//获取客户端位置请求的处理的代码 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 OnSyncPositionReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); ProtoData.SyncPositionEvtS2C syncPositionEvtS2C = BinSerializer.DeSerialize <ProtoData.SyncPositionEvtS2C>(bytes); GameObject.FindGameObjectWithTag("Player").GetComponent <Player>().OnSyncPositionEvent(syncPositionEvtS2C.dataList); }
void OnOpenBombReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); ProtoData.OpemBombS2CEvt openBombS2CEvt = BinSerializer.DeSerialize <ProtoData.OpemBombS2CEvt>(bytes); BattleMgr.Instance.bombMgr.OpenBomb(openBombS2CEvt); }
void OnSyncAddPlayerReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); AddPlayerS2CEvt playerS2CEvt = BinSerializer.DeSerialize <AddPlayerS2CEvt>(bytes); Debug.LogError("新玩家进入:" + playerS2CEvt.username); BattleSyncMgr.Instance.OnAddPlayerEvent(playerS2CEvt.username, playerS2CEvt.modelName, playerS2CEvt.nickName, playerS2CEvt.hp, playerS2CEvt.killCount); }
/// <summary> /// 收到状态事件消息 /// </summary> /// <param name="eventData"></param> void OnSyncTransitionReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); object[] objs = (object[])DictTool.GetValue <byte, object>(eventData.Parameters, 2); SyncTransitionS2C syncTransitionS2C = BinSerializer.DeSerialize <SyncTransitionS2C>(bytes); BattleSyncMgr.Instance.OnSyncTransitionEvent(syncTransitionS2C.username, (FSMTransition)syncTransitionS2C.targetTransition, objs); }
//获取客户端位置请求的处理的代码 public void OnSyncPositionReceived(ClientPeer peer, OperationRequest operationRequest, SendParameters sendParameters) { //接收位置并保持起来 byte[] bytes = (byte[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 1); ProtoData.SyncPositionC2S syncPositionC2S = BinSerializer.DeSerialize <ProtoData.SyncPositionC2S>(bytes); peer.x = syncPositionC2S.x; peer.y = syncPositionC2S.y; peer.z = syncPositionC2S.z; }
/// <summary> /// 收到位置等消息 /// </summary> /// <param name="eventData"></param> void OnSyncTransformReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); ProtoData.SyncTransformEvtS2C syncTransformEvtS2C = BinSerializer.DeSerialize <ProtoData.SyncTransformEvtS2C>(bytes); BattleSyncMgr.Instance.OnSyncTransformEvent(syncTransformEvtS2C.dataList); //Debug.LogWarning(Time.time); }
//获取客户端位置请求的处理的代码 public void OnSyncTransformReceived(Client peer, OperationRequest operationRequest, SendParameters sendParameters) { //接收位置并保持起来 byte[] bytes = (byte[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 1); ProtoData.SyncTransformC2S syncTransformC2S = BinSerializer.DeSerialize <ProtoData.SyncTransformC2S>(bytes); peer.playerData.heroData.x = syncTransformC2S.x; peer.playerData.heroData.y = syncTransformC2S.y; peer.playerData.heroData.z = syncTransformC2S.z; peer.playerData.heroData.angleY = syncTransformC2S.angleY; }
void OnSyncPlayerDeadReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); PlayerDeadS2CEvt playerDeadS2CEvt = BinSerializer.DeSerialize <PlayerDeadS2CEvt>(bytes); BattleSyncMgr.Instance.OnPlayerDeadEvent(playerDeadS2CEvt.deadUsername, playerDeadS2CEvt.killerUsername); if (BattleUI.Instance != null) { BattleUI.Instance.ShowFlutterText(playerDeadS2CEvt.deadNickName, playerDeadS2CEvt.killerNickName); } }
void OnAddBombReceived(EventData eventData) { byte[] bytes = (byte[])DictTool.GetValue <byte, object>(eventData.Parameters, 1); ProtoData.AddBombS2CEvt addBombS2CEvt = BinSerializer.DeSerialize <ProtoData.AddBombS2CEvt>(bytes); BombData bombData = new BombData(); bombData.username = addBombS2CEvt.username; bombData.type = (BombType)addBombS2CEvt.bombType; bombData.id = addBombS2CEvt.bombId; bombData.startPos = new Vector3(addBombS2CEvt.startX, addBombS2CEvt.startY, addBombS2CEvt.startZ); bombData.endPos = new Vector3(addBombS2CEvt.endX, addBombS2CEvt.endY, addBombS2CEvt.endZ); BattleMgr.Instance.bombMgr.AddBomb(bombData); }
//获取客户端位置请求的处理的代码 public void OnAddBombReceived(Client peer, OperationRequest operationRequest, SendParameters sendParameters) { //接收位置并保持起来 byte[] bytes = (byte[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 1); ProtoData.AddBombC2S addBombC2S = BinSerializer.DeSerialize <ProtoData.AddBombC2S>(bytes); ProtoData.AddBombS2CEvt addBombS2CEvt = new ProtoData.AddBombS2CEvt(); addBombS2CEvt.username = peer.playerData.username; addBombS2CEvt.bombType = addBombC2S.bombType; addBombS2CEvt.bombId = BombMgr.Instance.GetBombId(); addBombS2CEvt.startX = addBombC2S.startX; addBombS2CEvt.startY = addBombC2S.startY; addBombS2CEvt.startZ = addBombC2S.startZ; addBombS2CEvt.endX = addBombC2S.endX; addBombS2CEvt.endY = addBombC2S.endY; addBombS2CEvt.endZ = addBombC2S.endZ; byte[] bytes2 = BinSerializer.Serialize(addBombS2CEvt); foreach (Client tempPeer in ClientMgr.Instance.BattlePeerList) { if (!string.IsNullOrEmpty(tempPeer.playerData.username)) { EventData ed = new EventData((byte)MessageCode.AddBomb); Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add(1, bytes2); // 把新进来的用户名传递给其它客户端 ed.Parameters = data; tempPeer.SendEvent(ed, sendParameters); // 发送事件 } } BombData bombData = new BombData(); bombData.username = peer.playerData.username; bombData.nickName = peer.playerData.nickname; bombData.bombId = addBombS2CEvt.bombId; bombData.damageRange = addBombC2S.damageRange; bombData.durationTime = addBombC2S.durationTime; bombData.endX = addBombS2CEvt.endX; bombData.endY = addBombS2CEvt.endY; bombData.endZ = addBombS2CEvt.endZ; ServerMgr.Instance.bombUpdate.AddBomb(bombData); }
/// <summary> /// 收到登录消息 /// </summary> void OnLoginReceived(OperationResponse response) { ReturnCode returnCode = (ReturnCode)response.ReturnCode; if (returnCode == ReturnCode.Success) { Debug.LogError("用户名和密码验证成功"); byte[] bytes = DictTool.GetValue <byte, object>(response.Parameters, 1) as byte[]; ProtoData.LoginS2C loginS2C = BinSerializer.DeSerialize <ProtoData.LoginS2C>(bytes); PhotonEngine.username = loginS2C.username; Debug.Log(PhotonEngine.username); //验证成功,跳转到下一个场景 UnityEngine.SceneManagement.SceneManager.LoadScene(1); } else if (returnCode == ReturnCode.Failed) { Debug.LogError("用户名或密码错误"); } }
/// <summary> /// 收到登录消息 /// </summary> void OnLoginReceived(OperationResponse response) { ReturnCode returnCode = (ReturnCode)response.ReturnCode; if (returnCode == ReturnCode.Success) { LoginHintTextUI.Instance.SetText("用户名和密码验证成功", Color.green); Debug.LogError("用户名和密码验证成功"); byte[] bytes = DictTool.GetValue <byte, object>(response.Parameters, 1) as byte[]; ProtoData.LoginS2C loginS2C = BinSerializer.DeSerialize <ProtoData.LoginS2C>(bytes); GlobleHeroData.username = loginS2C.username; //验证成功,跳转到下一个场景 SceneMgr.LoadScene(SceneType.ChooseScene); } else if (returnCode == ReturnCode.Failed) { LoginHintTextUI.Instance.SetText("用户名或密码错误", Color.red); Debug.LogError("用户名或密码错误"); } }
// public void OnSyncAddPlayerReceived(Client peer, OperationRequest operationRequest, SendParameters sendParameters) { MyGameServer.log.Info("玩家进入战斗:" + peer.playerData.username); ClientMgr.Instance.AddBattlePeer(peer); byte[] bytes = (byte[])DictTool.GetValue <byte, object>(operationRequest.Parameters, 1); AddPlayerC2S playerC2S = BinSerializer.DeSerialize <AddPlayerC2S>(bytes); peer.playerData.heroData.modelName = playerC2S.modelName; peer.playerData.nickname = playerC2S.nickName; peer.playerData.heroData.hp = playerC2S.hp; peer.playerData.heroData.killCount = 0; peer.playerData.heroData.isLife = true; AddPlayerS2C playerS2C = new AddPlayerS2C(); //取得所有已经登陆(在线玩家)的用户名 foreach (Client tempPeer in ClientMgr.Instance.BattlePeerList) { //string.IsNullOrEmpty(tempPeer.username);//如果用户名为空表示没有登陆 //如果连接过来的客户端已经登陆了有用户名了并且这个客户端不是当前的客户端 if (!string.IsNullOrEmpty(tempPeer.playerData.username) && tempPeer != peer) { //把这些客户端的Usernam添加到集合里面 AddPlayerS2C.PlayerData playerData = new AddPlayerS2C.PlayerData(); playerData.username = tempPeer.playerData.username; playerData.modelName = tempPeer.playerData.heroData.modelName; playerData.nickName = tempPeer.playerData.nickname; playerData.hp = tempPeer.playerData.heroData.hp; playerData.killCount = tempPeer.playerData.heroData.killCount; playerS2C.dataList.Add(playerData); } } byte[] bytes2 = BinSerializer.Serialize(playerS2C); // 告诉当前客户端其它客户端的名字 Dictionary <byte, object> data = new Dictionary <byte, object>(); data.Add(1, bytes2); OperationResponse response = new OperationResponse(operationRequest.OperationCode); response.Parameters = data; peer.SendOperationResponse(response, sendParameters); // 告诉其它客户端有新的客户端加入 AddPlayerS2CEvt playerS2CEvt = new AddPlayerS2CEvt(); playerS2CEvt.username = peer.playerData.username; playerS2CEvt.modelName = peer.playerData.heroData.modelName; playerS2CEvt.nickName = peer.playerData.nickname; playerS2CEvt.hp = peer.playerData.heroData.hp; playerS2CEvt.killCount = peer.playerData.heroData.killCount; byte[] bytes3 = BinSerializer.Serialize(playerS2CEvt); foreach (Client tempPeer in ClientMgr.Instance.BattlePeerList) { if (!string.IsNullOrEmpty(tempPeer.playerData.username) && tempPeer != peer) { EventData ed = new EventData((byte)MessageCode.AddPlayer); Dictionary <byte, object> data2 = new Dictionary <byte, object>(); data2.Add(1, bytes3); // 把新进来的用户名传递给其它客户端 ed.Parameters = data2; tempPeer.SendEvent(ed, sendParameters); // 发送事件 } } }