Example #1
0
    public void RegistPlayer()
    {
        MessageClientsStats request = new MessageClientsStats();

        request.PlayerName = PlayerDataManager.Instance.MyData.Name;
        Debug.Log(PlayerDataManager.Instance.MyData.Name);
        SendMessage(request);
    }
Example #2
0
    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));
    }
Example #3
0
    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));
            }
        }
    }
Example #4
0
    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);
            }
        }
    }
Example #5
0
    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);
            }
        }
    }