public void RegistPlayer() { MessageClientsStats request = new MessageClientsStats(); request.PlayerName = PlayerDataManager.Instance.MyData.Name; Debug.Log(PlayerDataManager.Instance.MyData.Name); SendMessage(request); }
public void OnNewClientMessage(Socket sender, MessageClientsStats message) { //获取客户端信息 Debug.Log("[服务器]收到一份连接请求"); foreach (ClientKeys tempkey in Clients.Keys) { if (tempkey.socket == sender) { Clients.Remove(tempkey); break; } } Socket clientfd = sender; //自己用的元素 ClientKeys key = new ClientKeys(); ClientStates states = new ClientStates(); ClientState state = new ClientState(); NetworkPartment part = new NetworkPartment(); //发给玩家的信息 MessageClientsStats stats = new MessageClientsStats(); int ID = GetEmptyPlayerNetworkID(); key.NetworkID = ID; state.NetworkID = ID; key.socket = clientfd; part.socket = clientfd; //交付玩家信息 foreach (ClientStates s in Clients.Values) { ClientState FakeStates = new ClientState(); FakeStates.NetworkID = s.State.NetworkID; FakeStates.IsAlive = s.State.IsAlive; FakeStates.Stats = s.State.Stats; FakeStates.NickName = s.State.NickName; Debug.Log(FakeStates); Debug.Log(stats); stats.clients.Add(FakeStates); } stats.NetworkID = ID; stats.PlayerName = message.PlayerName; stats.clients.Add(state); stats.MapID = MapID; //开始整合 state.NickName = message.PlayerName; states.State = state; states.Network = part; //添加客户端 Clients.Add(key, states); //广播消息 BroadcastingMessage(JsonUtility.ToJson(stats)); }
void OnNewClientMessage(MessageClientsStats message) { Debug.Log(JsonUtility.ToJson(message)); ChatText text = new ChatText(message.PlayerName, "加入了游戏"); OnChatting(text); OnConnected(message.MapID); //自己的请求 if (MyID == 0) { MyID = message.NetworkID; foreach (ClientState s in message.clients) { if (!clients.ContainsKey(s.NetworkID)) { if (s.NetworkID == message.NetworkID) //添加自己 { clients.Add(message.NetworkID, new ClientsProperty(s, null)); } } else { Debug.LogError("ID为" + s.NetworkID + "的玩家已经存在!请检查脚本"); } } // RespawnRequest (); 早期测试用 } //别人的请求 foreach (ClientState s in message.clients) { if (s.NetworkID == MyID || clients.ContainsKey(s.NetworkID)) { continue; } //新玩家加入,添加玩家 if (s.IsAlive) { Debug.Log(s.Stats.Position); GameObject go = GameObject.Instantiate(UnitsManager.Instance.GetUnitObjectByID(s.Stats.ID, false), s.Stats.Position, s.Stats.Rotation) as GameObject; go.GetComponent <Unit> ().States = s.Stats; // go.GetComponent<Unit> ().States.PerHP = s.Stats.PerHP; // go.GetComponent<Unit> ().States.PerLife = s.Stats.PerLife; go.GetComponent <Unit> ().Moving(s.Stats.Position, s.Stats.Rotation); clients.Add(s.NetworkID, new ClientsProperty(s, go.GetComponent <Unit> ())); } else { clients.Add(s.NetworkID, new ClientsProperty(s, null)); } } }
public void FiringMessage(string s) { string[] message = s.Split('$'); foreach (string text in message) { try { if (text.Length < 4) { return; } MessageBase TempBase = JsonUtility.FromJson <MessageBase> (text); MessageBase MsgBase = (MessageBase)JsonUtility.FromJson(text, Type.GetType(TempBase.ProtoName)); //批发处理 if (typeof(MessageMove).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageMove move = (MessageMove)MsgBase; OnMoveMessage(move); } else if (typeof(MessageAttack).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageAttack attack = (MessageAttack)MsgBase; OnAttackMessage(attack); } else if (typeof(MessageBuildingAttack).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageBuildingAttack attack = (MessageBuildingAttack)MsgBase; OnBuildingAttackMessage(attack); } else if (typeof(MessageBuildingFocusing).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageBuildingFocusing focus = (MessageBuildingFocusing)MsgBase; OnBuildingFocusMessage(focus); } else if (typeof(MessageInteractiveStart).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageInteractiveStart interactive = (MessageInteractiveStart)MsgBase; OnInteractiveStartMessage(interactive); } else if (typeof(MessageInteractiveExit).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageInteractiveExit interactive = (MessageInteractiveExit)MsgBase; OnInteractiveExitMessage(interactive); } else if (typeof(MessageRespawnConstruction).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageRespawnConstruction respawn = (MessageRespawnConstruction)MsgBase; OnConstructionRespawn(respawn); } else if (typeof(MessageChangingWeapon).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageChangingWeapon Stats = (MessageChangingWeapon)MsgBase; OnChangeingWeaponMessage(Stats); } else if (typeof(MessageDamage).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageDamage Stats = (MessageDamage)MsgBase; OnDamageMessage(Stats); } else if (typeof(MessagePlayerDead).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessagePlayerDead dead = (MessagePlayerDead)MsgBase; OnPlayerDeadMessage(dead); } else if (typeof(MessageClientsStats).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageClientsStats Stats = (MessageClientsStats)MsgBase; OnNewClientMessage(Stats); } else if (typeof(MessageRespawnPlayer).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageRespawnPlayer respawn = (MessageRespawnPlayer)MsgBase; OnRespawnPlayer((MessageRespawnPlayer)MsgBase); } else if (typeof(MessageLeaveGame).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageLeaveGame leave = (MessageLeaveGame)MsgBase; OnPlayerLeaveGame(leave); } else if (typeof(MessageChat).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageChat chat = (MessageChat)MsgBase; OnPlayerChatting(chat); } else { Debug.Log("未知数据类型,该数据为:" + MsgBase.ToString() + ",记得处理!"); } }catch (ArgumentException ex) { }catch (Exception ex) { Debug.LogError("协议包无法解析!出错报告为:" + ex.ToString()); Debug.LogError("数据包为:" + text); } } }
public void DecodeMessage(Socket sender, byte[] Message, int count) { string message = System.Text.Encoding.Default.GetString(Message); // string[] s = message.Split ('"'); // string type = s [3]; // //判断数据类型 // //TODO 你永远也更新不完 // if (type == "MessageMove") { // try { // MessageMove move = (MessageMove)JsonUtility.FromJson (message, Type.GetType (s [3])); // OnMoveMessage (move); // } catch { // Debug.Log (message); // } // } else if (type == "MessageAttack") { // MessageAttack Attack = (MessageAttack)JsonUtility.FromJson (message, Type.GetType (s [3])); // OnAttackMessage (Attack); // } else if (type == "MessageChangingWeapon") { // MessageChangingWeapon change = (MessageChangingWeapon)JsonUtility.FromJson (message, Type.GetType (s [3])); // OnChangingWeaponMessage (change); // } // else if (type == "MessageDamage") // { // MessageDamage Damage = (MessageDamage)JsonUtility.FromJson(message, Type.GetType(s[3])); // OnDamageMessage(Damage); // } // else if (type == "MessagePlayerDead") // { // MessagePlayerDead dead = (MessagePlayerDead)JsonUtility.FromJson(message, Type.GetType(s[3])); // OnPlayerDeadMessage(dead); // } // else if (type == "MessageClientsStats") // { // MessageClientsStats Stats = (MessageClientsStats)JsonUtility.FromJson(message, Type.GetType(s[3])); // OnNewClientMessage(Stats); // } // else if (type == "MessageRespawnPlayer") // { // MessageRespawnPlayer respawn = (MessageRespawnPlayer)JsonUtility.FromJson(message, Type.GetType(s[3])); // OnRespawnPlayer(respawn); // } string[] s = message.Split('$'); foreach (string text in s) { try { MessageBase TempBase = JsonUtility.FromJson <MessageBase> (text); MessageBase MsgBase = (MessageBase)JsonUtility.FromJson(text, Type.GetType(TempBase.ProtoName)); if (typeof(MessageMove).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageMove move = (MessageMove)MsgBase; OnMoveMessage(move); } else if (typeof(MessageAttack).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageAttack attack = (MessageAttack)MsgBase; OnAttackMessage(attack); } else if (typeof(MessageBuildingAttack).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageBuildingAttack attack = (MessageBuildingAttack)MsgBase; OnBuildingAttackMessage(attack); } else if (typeof(MessageBuildingFocusing).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageBuildingFocusing focus = (MessageBuildingFocusing)MsgBase; OnBuildingFocusingMessage(focus); } else if (typeof(MessageInteractiveStart).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageInteractiveStart interactive = (MessageInteractiveStart)MsgBase; OnInteractiveStartMessage(interactive); } else if (typeof(MessageInteractiveExit).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageInteractiveExit interactive = (MessageInteractiveExit)MsgBase; OnInteractiveExitMessage(interactive); } else if (typeof(MessageChangingWeapon).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageChangingWeapon Stats = (MessageChangingWeapon)MsgBase; OnChangingWeaponMessage(Stats); } else if (typeof(MessageDamage).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageDamage Stats = (MessageDamage)MsgBase; OnDamageMessage(Stats); } else if (typeof(MessagePlayerDead).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessagePlayerDead dead = (MessagePlayerDead)MsgBase; OnPlayerDeadMessage(dead); } else if (typeof(MessageClientsStats).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageClientsStats Stats = (MessageClientsStats)MsgBase; OnNewClientMessage(sender, Stats); } else if (typeof(MessageRespawnPlayer).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageRespawnPlayer respawn = (MessageRespawnPlayer)MsgBase; OnRespawnPlayer(respawn); } else if (typeof(MessageRespawnConstruction).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageRespawnConstruction respawn = (MessageRespawnConstruction)MsgBase; OnConstructionRespawn(respawn); } else if (typeof(MessageChat).IsAssignableFrom(Type.GetType(MsgBase.ProtoName))) { MessageChat chat = (MessageChat)MsgBase; OnChattingMessage(chat); } else { Debug.Log("未知数据类型,该数据为:" + text + ",服务器已做丢包处理.或者说,你忘记处理了?"); } }catch (ArgumentException ex) { }catch (Exception ex) { Debug.LogError("协议包无法解析!出错报告为:" + ex.ToString()); Debug.LogError("数据包为:" + text); } } }