Example #1
0
    void ListenTcpClient(System.IAsyncResult ar)
    {
        // bit stream
        NetBitStream stream = new NetBitStream();
        try
        {
            // 取得服务器端的Socket
            // Socket listener = (Socket)ar.AsyncState;

            // 取得客户端的socket
            Socket client = _listener.EndAccept(ar);
            stream._socket = client;

            // 设置 timeout时间
            client.SendTimeout = _sendTimeout;
            client.ReceiveTimeout = _revTimeout;

            // 接收从服务器返回的头信息
            client.BeginReceive(stream.BYTES, 0, NetBitStream.header_length, SocketFlags.None, new System.AsyncCallback(ReceiveHeader), stream);

            // 发送消息 建立一个新的连接
            PushPacket((ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION, "", client);

        }
        catch (System.Exception)
        {
            //出现错误
        }

        // 继续接受其它连接
        _listener.BeginAccept(new System.AsyncCallback(ListenTcpClient), _listener);
    }
Example #2
0
    private void SendControl()
    {
        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)MessageIdentifiers.ID.PLAYER_ACTION);
        Player p = m_netManager.player;

        stream.WriteString(p.name);
        stream.WriteBool(p.first);
        stream.WriteFloat(p.pos_x);
        stream.WriteFloat(p.pos_y);
        stream.WriteFloat(p.hp);
        stream.WriteInt(p.ctype);
        int count = CGameManager.Instance.ControlList().Count;

        stream.WriteInt(count);

        List <byte> lc = CGameManager.Instance.ControlList();

        for (int i = 0; i < count; i++)
        {
            stream.WriteByte(lc[i]);
        }

        stream.EncodeHeader();

        m_netManager.Send(stream);
        CGameManager.Instance.ControlList().Clear();
    }
Example #3
0
        //向登录服务器发送数据
        public void Send(NetBitStream bts)
        {
            if (clientSocket == null)
            {
                ClientDispatcher.Error("请先连接到服务器!");
                return;
            }
            if (!clientSocket.Connected)
            {
                return;
            }
            //创建NetWorkStream
            NetworkStream ns;

            //加锁,避免在多线程下出问题
            lock (clientSocket)
            {
                ns = new NetworkStream(clientSocket);
            }
            if (ns.CanWrite)
            {
                try
                {
                    ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallBack), ns);
                }
                catch
                {
                    Disconnect(0);
                }
            }
        }
Example #4
0
        // 处理消息
        public static void ProcessMessage(byte[] Buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(Buffer);
            EProtocolId id = (EProtocolId)nbs.ReadProtocolHeader();

            //Debug($"处理协议->  {id} -> {(int)id} ......");

            if (EventHandler != null)
            {
                EventHandler(Buffer);
                return;
            }

            if (!DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                Debug(string.Format("未注册协议->  {0} -> {1} ......", id, (int)id));
                return;
            }
            try
            {
                //处理
                protocolevent.ExecuteProtocolEvent(Buffer);
            }
            catch (Exception ex)
            {
                Error(string.Format("处理协议->  {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message));
            }
        }
Example #5
0
    private void MSG_CLIENT_LINK_WORLD()
    {
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);

        // 从流中读取新登陆玩家状态信息, 并写入
        string name;
        bool   first;
        float  pos_x;
        float  pos_y;
        float  hp;
        int    ctype;

        stream.ReadString(out name);
        stream.ReadBool(out first);
        stream.ReadFloat(out pos_x);
        stream.ReadFloat(out pos_y);
        stream.ReadFloat(out hp);
        stream.ReadInt(out ctype);

        Player p = new Player(name, first, pos_x, pos_y, hp, ctype);

        playerList.Add(p);
        CGameManager.Instance.AddPlayer(p);
    }
Example #6
0
    // Update is called once per frame
    public override void Update()
    {
        NetPacket packet = null;

        for (packet = GetPacket(); packet != null;)
        {
            ushort msgid = 0;
            packet.TOID(out msgid);

            switch (msgid)
            {
            case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED:
            {
                Debug.Log("连接到服务器");
                break;
            }

            case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED:
            {
                Debug.Log("连接服务器失败,请退出");
                break;
            }

            case (ushort)MessageIdentifiers.ID.CONNCET_LOST:
            {
                Debug.Log("丢失服务器的连接,请按任意键退出");
                break;
            }

            case (ushort)Protocol.ID.LOGIN:
            {
                NetBitStream stream = new NetBitStream();

                stream.BeginRead2(packet);

                stream.DecodeHeader();

                byte[] bs = stream.ReadBodyBytes();
                System.IO.MemoryStream mstream  = new System.IO.MemoryStream(bs);
                CommonProto.Response   response = ProtoBuf.Serializer.Deserialize <CommonProto.Response>(mstream);

                Debug.Log("responseid = " + response.id + "; " + response.desc);

                if (response.id == 0)
                {
                    LoadingScene.LoadNewScene("demo");
                }
                break;
            }

            default:
            {
                break;
            }
            }
            packet = null;
        }
    }
Example #7
0
    public void SendChat(string message)
    {
        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT);
        stream.WriteString(message);
        stream.EncodeHeader();

        m_netManager.Send(stream);
    }
Example #8
0
	// Update is called once per frame
	public override void Update () {
        NetPacket packet = null;

        for ( packet = GetPacket(); packet != null; )
        {
            ushort msgid = 0;
            packet.TOID( out msgid );

            switch(msgid)
            {
                case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED:
                    {
                        Debug.Log( "连接到服务器" );
                        break;
                    }
                case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED:
                    {
                        Debug.Log( "连接服务器失败,请退出" );
                        break;
                    }
                case (ushort)MessageIdentifiers.ID.CONNCET_LOST:
                    {
                        Debug.Log( "丢失服务器的连接,请按任意键退出" );
                        break;
                    }
                case (ushort)Protocol.ID.LOGIN:
                    {
                        NetBitStream stream = new NetBitStream();

                        stream.BeginRead2( packet );

                        stream.DecodeHeader();

                        byte[] bs = stream.ReadBodyBytes();
                        System.IO.MemoryStream mstream = new System.IO.MemoryStream( bs );
                        CommonProto.Response response = ProtoBuf.Serializer.Deserialize<CommonProto.Response>( mstream );

                        Debug.Log( "responseid = "+response.id + "; " + response.desc );

                        if ( response.id == 0 ) { 
                            LoadingScene.LoadNewScene( "demo" );
                        }
                        break;
                    }
                default:
                    {
                        break;
                    }
            }
            packet = null;
        }
	}
Example #9
0
    // 发送聊天消息
    void SendChat()
    {
        // 将聊天消息写入NetBitStream对象
        NetBitStream stream = new NetBitStream();
        stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT);
        stream.WriteString(_inputString);
        stream.EncodeHeader();

        // 发送给服务器端
        mGNManager.Send(stream);

        //清空_inputString
        _inputString = "";
    }
Example #10
0
    // 发送聊天消息
    void SendChat()
    {
        // 将聊天消息写入NetBitStream对象
        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT);
        stream.WriteString(m_inputString);
        stream.EncodeHeader();

        // 发送给服务器端
        m_netManager.Send(stream);

        //清空m_inputString
        m_inputString = "";
    }
Example #11
0
    private void MSG_CLIENT_LOGIN_RESPONSE()
    {
        bool         success;
        string       msg = "";
        bool         first;
        float        pos_x;
        float        pos_y;
        float        hp;
        int          ctype;
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);
        stream.ReadBool(out success);
        stream.ReadString(out msg);

        //读取用户基本状态信息,并更新信息
        stream.ReadBool(out first);
        stream.ReadFloat(out pos_x);
        stream.ReadFloat(out pos_y);
        stream.ReadFloat(out hp);
        stream.ReadInt(out ctype);
        //更新用户基本信息
        player.name  = strUsername;
        player.first = first;
        player.pos_x = pos_x;
        player.pos_y = pos_y;
        player.hp    = hp;
        player.ctype = ctype;

        Debug.Log("$$$" + strUsername);
        Debug.Log(first);
        Debug.Log(pos_x);
        Debug.Log(pos_y);
        Debug.Log(hp);
        Debug.Log(ctype);

        if (success)
        {
            Debug.Log("登录成功!");
            iLoginState = 1;
        }
        else
        {
            Debug.Log("登录失败!");
            iLoginState = 2;
        }
        strMessage = msg;
    }
Example #12
0
    private void MSG_ID_CHAT()
    {
        NetBitStream stream  = new NetBitStream();
        string       recvStr = "";

        stream.BeginRead2(packet);
        stream.ReadString(out recvStr);
        NetClient.Instance.RecvString = recvStr;
        //string _name = "";
        //foreach (Player p in playerList)
        //{
        //    if (p.peer.RemoteEndPoint.ToString().Equals(packet.peer.RemoteEndPoint.ToString()))
        //    {
        //        _name = p.name;
        //    }
        //}
        CMenuCallback.Instance.textlist.Add(packet.peer.RemoteEndPoint.ToString() + ": " + recvStr);
    }
Example #13
0
    void SendChat2()
    {
        NetStructManager.TestStruct chatstr;
        chatstr.header = 0;
        chatstr.msgid = (ushort)MessageIdentifiers.ID.ID_CHAT2;
        chatstr.m = 0.1f;
        chatstr.n = 1000;
        chatstr.str = _inputString;

        byte[] bytes = NetStructManager.GetStructBytes(chatstr);

        NetBitStream stream = new NetBitStream();
        stream.CopyBytes(bytes);

        mGNManager.Send(stream);

        //清空_inputString
        _inputString = "";
    }
Example #14
0
    private void MSG_CLIENT_EXIT_WORLD_RESPONSE()
    {
        //to do ,读取流信息, 跟新玩家列表与信息
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);
        string name = "";

        stream.ReadString(out name);
        foreach (Player p in playerList)
        {
            if (p.name.Equals(name))
            {
                playerList.Remove(p);
                CGameManager.Instance.RemovePlayer(name);
                break;
            }
        }
    }
Example #15
0
    private void MSG_CLIENT_LINK_WORLD_RESPONSE()
    {
        bool         success;
        string       msg    = "";
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);
        stream.ReadBool(out success);
        stream.ReadString(out msg);
        if (success)
        {
            Debug.Log("登入游戏世界成功**");
            iGameState = 1;
            // 从流中读取世界状态信息, 并写入
            int    count;
            string name;
            bool   first;
            float  pos_x;
            float  pos_y;
            float  hp;
            int    ctype;
            stream.ReadInt(out count);
            for (int i = 0; i < count; i++)
            {
                stream.ReadString(out name);
                stream.ReadBool(out first);
                stream.ReadFloat(out pos_x);
                stream.ReadFloat(out pos_y);
                stream.ReadFloat(out hp);
                stream.ReadInt(out ctype);

                Player p = new Player(name, first, pos_x, pos_y, hp, ctype);
                playerList.Add(p);
                CGameManager.Instance.InitPlayer(p);
            }
        }
        else
        {
            Debug.Log("登录游戏世界失**");
            iGameState = 2;
        }
        strMessage = msg;
    }
        private static void GateEventHandler(byte[] buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(buffer);
            EProtocolId id     = (EProtocolId)nbs.ReadProtocolHeader();
            var         objMsg = ProtocolDump.Dump(id, buffer);

            if (objMsg == null)
            {
                loger.Error($"错误协议!{id}");
                return;
            }
            if (ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                protocolevent.ExecuteProtocolEvent(buffer);
                return;
            }

            if ((int)id < 100)
            {
                return;
            }
            long puid = ((ProtocolMsgBase)objMsg).Puid;

            if (puid == 0 && ((ProtocolMsgBase)objMsg).RspPuids.Count == 0)
            {
                loger.Error($"发送客户端消息错误,无发送目标!");
                return;
            }
            List <long> rspId = new List <long>();

            if (puid != 0)
            {
                rspId.Add(puid);
            }
            if (((ProtocolMsgBase)objMsg).RspPuids.Count > 0)
            {
                rspId.AddRange(((ProtocolMsgBase)objMsg).RspPuids);
            }
            SendMsg(objMsg, rspId);
        }
        private static void GameEventHandler(byte[] buffer)
        {
            var nbs = new NetBitStream();

            nbs.BeginRead(buffer);
            EProtocolId id     = (EProtocolId)nbs.ReadProtocolHeader();
            var         objMsg = ProtocolDump.Dump(id, buffer);

            if (objMsg == null)
            {
                loger.Error($"错误协议!{id}");
                return;
            }

            if (id == EProtocolId.S2C_SERVER_CONNECT)
            {
                var rsp = new C2S_Server_Connect()
                {
                    SessionType = (short)BaseServerInfo.SessionType
                };
                Dispatcher.SendByServerID(((S2C_Server_Connect)objMsg).ServerID, rsp);
                return;
            }
            if ((int)id < 100)
            {
                return;
            }
            if (!ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent))
            {
                loger.Debug(string.Format("未注册协议->  {0} -> {1} ......", id, (int)id));
                return;
            }
            try
            {
                //处理
                protocolevent.ExecuteProtocolEvent(buffer);
            }
            catch (Exception ex)
            {
                loger.Error(string.Format("处理协议->  {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message));
            }
        }
Example #18
0
    public void Login(string name,string pwd)
    {
        Debug.Log( "name = " + name + "; pwd = " + pwd );

        NetBitStream stream = new NetBitStream();
        stream.BeginWrite( (ushort)Protocol.ID.LOGIN );

        LoginProto.Login login = new LoginProto.Login();
        login.name = name;
        login.pwd = pwd;

        System.IO.MemoryStream mstream = new System.IO.MemoryStream();
        ProtoBuf.Serializer.Serialize<LoginProto.Login>( mstream, login );
        byte[] bs = mstream.ToArray();

        stream.WriteBodyBytes( bs );
        stream.EncodeHeader();

        _SvrMgr.Send( stream );
    }
Example #19
0
    public void Send(NetBitStream bts, Socket peer)
    {
        NetworkStream ns;
        lock (peer)
        {
            ns = new NetworkStream(peer);
        }

        if (ns.CanWrite)
        {
            try
            {
                ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallback), ns);
            }
            catch (System.Exception)
            {
                PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, "", peer);
            }
        }
    }
Example #20
0
    void SendChat2()
    {
        NetStructManager.TestStruct chatstr;
        chatstr.header = 0;
        chatstr.msgid  = (ushort)MessageIdentifiers.ID.ID_CHAT2;
        chatstr.m      = 0.1f;
        chatstr.n      = 1000;
        chatstr.str    = m_inputString;

        byte[] bytes = NetStructManager.getBytes(chatstr);

        NetBitStream stream = new NetBitStream();

        stream.CopyBytes(bytes);

        m_netManager.Send(stream);

        //清空m_inputString
        m_inputString = "";
    }
Example #21
0
    private void MSG_CLIENT_REGISTER_RESPONSE()
    {
        bool         success;
        string       msg    = "";
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);
        stream.ReadBool(out success);
        stream.ReadString(out msg);
        if (success)
        {
            Debug.Log("注册成功!");
            iRegisterState = 1;
        }
        else
        {
            Debug.Log("注册失败!");
            iRegisterState = 2;
        }
        strMessage = msg;
    }
Example #22
0
    public void Login(string name, string pwd)
    {
        Debug.Log("name = " + name + "; pwd = " + pwd);

        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)Protocol.ID.LOGIN);

        LoginProto.Login login = new LoginProto.Login();
        login.name = name;
        login.pwd  = pwd;

        System.IO.MemoryStream mstream = new System.IO.MemoryStream();
        ProtoBuf.Serializer.Serialize <LoginProto.Login>(mstream, login);
        byte[] bs = mstream.ToArray();

        stream.WriteBodyBytes(bs);
        stream.EncodeHeader();

        _SvrMgr.Send(stream);
    }
Example #23
0
            public void Input()
            {
                while (true)
                {
                    string str = System.Console.ReadLine();
                    if (str.CompareTo("quit") == 0)
                    {
                        client.Disconnect(0);
                        NetThread.Abort();
                        break;
                    }
                    else
                    {
                        /*
                         * NetBitStream stream = new NetBitStream();
                         * stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT);
                         * stream.WriteString(str);
                         * stream.EncodeHeader();
                         *
                         * client.Send(stream);
                         */

                        NetStructManager.TestStruct chatstr;
                        chatstr.header = 0;
                        chatstr.msgid  = (ushort)MessageIdentifiers.ID.ID_CHAT2;
                        chatstr.m      = 0.1f;
                        chatstr.n      = 100;
                        chatstr.str    = str;

                        byte[] bs = NetStructManager.getBytes(chatstr);
                        //NetStructManager.EncoderHeader(ref bs);

                        NetBitStream stream = new NetBitStream();
                        stream.CopyBytes(bs);

                        client.Send(stream);
                    }
                }
            }
Example #24
0
    public bool Login(string username, string password, out string msg)
    {
        if (false == m_netManager.bConnected)
        {
            msg = "无法连接到服务器,请稍后重试!";
            return(false);
        }
        m_netManager.iLoginState = 0;
        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)MessageIdentifiers.ID.CLIENT_LOGIN);
        stream.WriteString(username + "&" + password);
        stream.EncodeHeader();
        m_netManager.Send(stream);
        msg = "";

        Stopwatch sw = new Stopwatch();

        sw.Start();
        while (0 == m_netManager.iLoginState)
        {
            m_netManager.Update();
            long time = sw.ElapsedMilliseconds;
            if (time > 5000)
            {
                break;
            }
        }
        sw.Stop();
        if (1 == m_netManager.iLoginState)
        {
            msg = m_netManager.strMessage;
            m_netManager.strUsername = username;
            return(true);;
        }
        msg = m_netManager.strMessage;
        return(false);
    }
Example #25
0
    public bool LinkWorld(out string msg)
    {
        if (false == m_netManager.bConnected)
        {
            msg = "无法连接到服务器,请稍后重试!";
            return(false);
        }
        m_netManager.iGameState = 0;
        NetBitStream stream = new NetBitStream();

        stream.BeginWrite((ushort)MessageIdentifiers.ID.CLIENT_LINK_WORLD);
        stream.WriteString(m_netManager.strUsername);
        stream.WriteInt(m_netManager.player.ctype);

        stream.EncodeHeader();
        m_netManager.Send(stream);
        msg = "";
        Stopwatch sw = new Stopwatch();

        sw.Start();
        while (0 == m_netManager.iGameState)
        {
            m_netManager.Update();
            long time = sw.ElapsedMilliseconds;
            if (time > 5000)
            {
                break;
            }
        }
        sw.Stop();
        if (1 == m_netManager.iGameState)
        {
            msg = m_netManager.strMessage;
            return(true);;
        }
        msg = m_netManager.strMessage;
        return(false);
    }
Example #26
0
    // 发送消息
    public void Send(NetBitStream bts)
    {
        if (!_socket.Connected)
            return;

        NetworkStream ns;
        lock (_socket)
        {
            ns = new NetworkStream(_socket);
        }

        if (ns.CanWrite)
        {
            try
            {
                ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallback), ns);
            }
            catch (System.Exception)
            {
                PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, "");
                Disconnect(0);
            }
        }
    }
Example #27
0
        static void Main(string[] args)
        {
            ushort id      = 10;
            byte   n       = 0;
            bool   b       = false;
            int    vint    = 100;
            uint   vint2   = 999;
            short  vshort  = 10;
            ushort vshort2 = 101;
            float  number  = 0.8f;
            string data    = "我是中国人";

            NetBitStream stream = new NetBitStream();

            stream.BeginWrite(id);
            stream.WriteByte(n);
            stream.WriteBool(b);
            stream.WriteInt(vint);
            stream.WriteUInt(vint2);
            stream.WriteShort(vshort);
            stream.WriteUShort(vshort2);
            stream.WriteFloat(number);
            stream.WriteString(data);
            stream.EncodeHeader();

            NetPacket packet = new NetPacket();

            packet.CopyBytes(stream);


            NetBitStream stream2 = new NetBitStream();

            stream2.BeginRead(packet, out id);
            stream2.ReadByte(out n);
            stream2.ReadBool(out b);
            stream2.ReadInt(out vint);
            stream2.ReadUInt(out vint2);
            stream2.ReadShort(out vshort);
            stream2.ReadUShort(out vshort2);
            stream2.ReadFloat(out number);
            stream2.ReadString(out data);

            System.Console.WriteLine(id);
            System.Console.WriteLine(n);
            System.Console.WriteLine(b);
            System.Console.WriteLine(vint);
            System.Console.WriteLine(vint2);
            System.Console.WriteLine(vshort);
            System.Console.WriteLine(vshort2);
            System.Console.WriteLine(number);
            System.Console.WriteLine(data);

            NetStructManager.TestStruct cif;
            cif.header = 10;
            cif.msgid  = 5;
            cif.m      = 0.9f;
            cif.n      = 10;
            cif.str    = "hello";


            byte[] bs = NetStructManager.getBytes(cif);
            NetStructManager.EncoderHeader(ref bs);

            NetStructManager.TestStruct cif2;
            System.Type type = typeof(NetStructManager.TestStruct);

            cif2 = (NetStructManager.TestStruct)NetStructManager.fromBytes(bs, type);

            System.Console.WriteLine(":" + bs.Length);
            System.Console.WriteLine(":" + cif2.header);
            System.Console.WriteLine(cif2.msgid);
            System.Console.WriteLine(cif2.m);
            System.Console.WriteLine(cif2.n);
            System.Console.WriteLine(cif2.str);


            ChatClient client = new ChatClient();

            client.Start();
            client.Update();
        }
Example #28
0
    // 从数据流中拷贝数据
    public void CopyBytes(NetBitStream stream)
    {
        stream.BYTES.CopyTo(_bytes, 0);

        _length = stream.Length;
    }
Example #29
0
 public void Send( NetBitStream stream )
 {
     client.Send( stream );
 }
Example #30
0
            public override void Update()
            {
                NetPacket packet = null;

                while (true)
                {
                    for (packet = GetPacket(); packet != null;)
                    {
                        // 获得消息ID
                        ushort msgid = 0;
                        packet.TOID(out msgid);

                        switch (msgid)
                        {
                        case (ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION:
                        {
                            System.Console.WriteLine("新的连接:" + packet._peer.RemoteEndPoint.ToString());

                            _socketList.Add(packet._peer);
                            break;
                        }

                        case (ushort)MessageIdentifiers.ID.CONNECTION_LOST:
                        {
                            System.Console.WriteLine("一个用户退出");

                            _socketList.Remove(packet._peer);
                            break;
                        }

                        case (ushort)MessageIdentifiers.ID.ID_CHAT:
                        {
                            string chatdata = "";

                            // 读取聊天消息
                            NetBitStream stream = new NetBitStream();

                            stream.BeginRead2(packet);
                            stream.ReadString(out chatdata);
                            stream.EncodeHeader();

                            // 群发聊天消息
                            for (int i = 0; i < _socketList.Count; i++)
                            {
                                Socket sk = (Socket)_socketList[i];
                                if (sk == packet._peer)
                                {
                                    continue;
                                }
                                _server.Send(stream, sk);
                            }

                            //System.Console.WriteLine("收到消息:" + chatdata);
                            break;
                        }

                        case (ushort)MessageIdentifiers.ID.ID_CHAT2:
                        {
                            // 读取聊天消息
                            NetStructManager.TestStruct chatstr;
                            chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct));
                            System.Console.WriteLine("header:" + chatstr.header);
                            System.Console.WriteLine("msgid:" + chatstr.msgid);
                            System.Console.WriteLine("m:" + chatstr.n);
                            System.Console.WriteLine("n:" + chatstr.m);
                            System.Console.WriteLine("str:" + chatstr.str);

                            NetBitStream stream = new NetBitStream();
                            stream.CopyBytes(packet._bytes);

                            // 群发聊天消息
                            for (int i = 0; i < _socketList.Count; i++)
                            {
                                Socket sk = (Socket)_socketList[i];
                                if (sk == packet._peer)
                                {
                                    continue;
                                }
                                _server.Send(stream, sk);
                            }

                            break;
                        }

                        default:
                        {
                            // 错误
                            break;
                        }
                        }

                        packet = null;
                    } // end fore
                }     // end while
            }
    public override void Update()
    {
        NetPacket packet = null;
        while (true)
        {

            for (packet = GetPacket(); packet != null; )
            {
                // 获得消息ID
                ushort msgid = 0;
                packet.TOID(out msgid);

                switch (msgid)
                {
                    case (ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION:
                        {
                            System.Console.WriteLine("新的连接:" + packet._peer.RemoteEndPoint.ToString());

                            _socketList.Add(packet._peer);
                            break;
                        }
                    case (ushort)MessageIdentifiers.ID.CONNECTION_LOST:
                        {
                            System.Console.WriteLine("一个用户退出");

                            _socketList.Remove(packet._peer);
                            break;
                        }
                    case (ushort)MessageIdentifiers.ID.ID_CHAT:
                        {
                            string chatdata = "";

                            // 读取聊天消息
                            NetBitStream stream = new NetBitStream();

                            stream.BeginRead2(packet);
                            stream.ReadString(out chatdata);
                            stream.EncodeHeader();

                            // 群发聊天消息
                            for (int i = 0; i < _socketList.Count; i++)
                            {
                                Socket sk = (Socket)_socketList[i];
                                if (sk == packet._peer)
                                    continue;
                                _server.Send(stream, sk);
                            }

                            System.Console.WriteLine("收到消息:" + chatdata);
                            break;
                        }
                    case (ushort)MessageIdentifiers.ID.ID_CHAT2:
                        {

                            // 读取聊天消息
                            NetStructManager.TestStruct chatstr;
                            chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct));
                            System.Console.WriteLine("header:" + chatstr.header);
                            System.Console.WriteLine("msgid:" + chatstr.msgid);
                            System.Console.WriteLine("m:" + chatstr.n);
                            System.Console.WriteLine("n:" + chatstr.m);
                            System.Console.WriteLine("str:" + chatstr.str);

                            NetBitStream stream = new NetBitStream();
                            stream.CopyBytes(packet._bytes);

                            // 群发聊天消息
                            for (int i = 0; i < _socketList.Count; i++)
                            {
                                Socket sk = (Socket)_socketList[i];
                                if (sk == packet._peer)
                                    continue;
                                _server.Send(stream, sk);
                            }

                            break;
                        }

                    default:
                        {
                            // 错误
                            break;
                        }
                }

                packet = null;

            }// end fore
        }// end while
    }
Example #32
0
            public override void Update()
            {
                NetPacket packet = null;

                while (true)
                {
                    for (packet = GetPacket(); packet != null;)
                    {
                        ushort msgid = 0;
                        packet.TOID(out msgid);

                        switch (msgid)
                        {
                        case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED:
                        {
                            System.Console.WriteLine("连接到服务器");
                            NetThread = new System.Threading.Thread(new System.Threading.ThreadStart(Input));
                            NetThread.Start();
                            break;
                        }

                        case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED:
                        {
                            System.Console.WriteLine("连接服务器失败,请按任意键退出");
                            System.Console.Read();
                            return;
                        }

                        case (ushort)MessageIdentifiers.ID.CONNECTION_LOST:
                        {
                            System.Console.WriteLine("丢失与服务器的连接,请按任意键退出");
                            System.Console.Read();
                            return;
                        }

                        case (ushort)MessageIdentifiers.ID.ID_CHAT:
                        {
                            string chatdata = "";

                            NetBitStream stream = new NetBitStream();
                            stream.BeginRead2(packet);
                            stream.ReadString(out chatdata);

                            System.Console.WriteLine("收到消息:" + chatdata);
                            break;
                        }

                        case (ushort)MessageIdentifiers.ID.ID_CHAT2:
                        {
                            NetStructManager.TestStruct chatstr;

                            chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct));

                            System.Console.WriteLine("收到消息:" + chatstr.str);
                            break;
                        }

                        default:
                        {
                            // 错误
                            break;
                        }
                        }

                        packet = null;
                    } // end fore
                }     // end while
            }
Example #33
0
    // 异步连接回调
    void ConnectionCallback(System.IAsyncResult ar)
    {
        NetBitStream stream = new NetBitStream();

        // 获得服务器socket
        stream._socket = (Socket)ar.AsyncState;

        try
        {
            // 与服务器取得连接
            _socket.EndConnect(ar);

            // 设置timeout
            _socket.SendTimeout = _sendTimeout;
            _socket.ReceiveTimeout = _revTimeout;

            // 向Network Manager传递消息
            PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED, "");

            // 接收从服务器返回的头信息
            _socket.BeginReceive(stream.BYTES, 0, NetBitStream.header_length, SocketFlags.None, new System.AsyncCallback(ReceiveHeader), stream);

        }
        catch (System.Exception e)
        {
            // 错误处理
            if (e.GetType() == typeof(SocketException))
            {
                if (((SocketException)e).SocketErrorCode == SocketError.ConnectionRefused)
                {
                    PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED, e.Message);
                }
                else
                {
                    PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, e.Message);
                }
            }

            Disconnect(0);
        }
    }
Example #34
0
    // 向Network Manager的队列传递数据
    void PushPacket2(NetBitStream stream)
    {
        NetPacket packet = new NetPacket();
        stream.BYTES.CopyTo(packet._bytes, 0);
        packet._peer = stream._socket;

        _netMgr.AddPacket(packet);
    }
Example #35
0
    private void MSG_PLAYER_ACTION()
    {
        //读取流信息,更新玩家状态
        NetBitStream stream = new NetBitStream();

        stream.BeginRead2(packet);

        string name;
        bool   first;
        float  pos_x;
        float  pos_y;
        float  hp;
        int    ctype;

        stream.ReadString(out name);
        stream.ReadBool(out first);
        stream.ReadFloat(out pos_x);
        stream.ReadFloat(out pos_y);
        stream.ReadFloat(out hp);
        stream.ReadInt(out ctype);

        Player player = null;

        foreach (Player p in playerList)
        {
            if (p.name.Equals(name))
            {
                player = p;
            }
        }

        player.name  = name;
        player.first = first;
        player.pos_x = pos_x;
        player.pos_y = pos_y;
        player.hp    = hp;
        player.ctype = ctype;

        List <byte> lc = new List <byte>();
        int         count;

        stream.ReadInt(out count);
        for (int i = 0; i < count; i++)
        {
            byte b;
            stream.ReadByte(out b);
            lc.Add(b);
        }
        //传递控制信息
        CGameManager.Instance.UpdateControl(name, lc);
        Debug.Log("recv control ****");
        Debug.Log(name);
        Debug.Log(first);
        Debug.Log(pos_x);
        Debug.Log(pos_y);
        Debug.Log(hp);
        Debug.Log(ctype);
        string str = "";

        foreach (byte b in lc)
        {
            str += b + "-";
        }
        Debug.Log(str);
    }
Example #36
0
 public void Send(NetBitStream stream)
 {
     client.Send(stream);
 }
Example #37
0
    public override void Update()
    {
        NetPacket packet = null;

        for (packet = GetPacket(); packet != null; )
        {
            ushort msgid = 0;
            packet.TOID(out msgid);

            switch (msgid)
            {
                case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED:
                    {
                        Debug.Log("连接到服务器");
                        break;
                    }
                case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED:
                    {
                        Debug.Log("连接服务器失败,请退出" + packet._error);
                        break;
                    }
                case (ushort)MessageIdentifiers.ID.CONNECTION_LOST:
                    {
                        Debug.Log("失与服务器的连接,请按任意键退出" + packet._error);
                        break;
                    }
                case (ushort)MessageIdentifiers.ID.ID_CHAT:
                    {

                        NetBitStream stream = new NetBitStream();
                        stream.BeginRead2(packet);
                        stream.ReadString(out GameClient.Instance._revString);

                        break;
                    }
                case (ushort)MessageIdentifiers.ID.ID_CHAT2:
                    {
                        NetStructManager.TestStruct chatstr;
                        chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct));

                        GameClient.Instance._revString = chatstr.str;

                        Debug.Log(chatstr.header);
                        Debug.Log(chatstr.msgid);
                        Debug.Log(chatstr.m);
                        Debug.Log(chatstr.n);
                        Debug.Log(chatstr.str);

                        break;
                    }
                default:
                    {
                        // 错误
                        break;
                    }
            }// end switch

            // 销毁数据包
            packet = null;

        }// end for
    }