Example #1
0
    public void TestPing(byte[] data, ushort msgId)
    {
        SCPing scping = SCPing.Parser.ParseFrom(data);

        lastSCPingTime = DateTime.Now.Ticks;
        Debug.Log($"【Client】HeartBeat 客户端收到服务器心跳 {msgId} 回调====={scping.Time}  {DateTime.Now}");
    }
Example #2
0
        public static void ClientAccepted(IAsyncResult ar)
        {
            var socket = ar.AsyncState as Socket;

            //这就是客户端的Socket实例,我们后续可以将其保存起来
            var client = socket.EndAccept(ar);

            clientSocket = client;
            Console.WriteLine($"有新的客户端连接: {client.RemoteEndPoint}");

            Person john = new Person
            {
                Id     = 1234,
                Name   = "Hi there, I accept you request at " + DateTime.Now.ToString(),
                Email  = "*****@*****.**",
                Phones = { new Person.Types.PhoneNumber {
                               Number = "555-4321", Type = PhoneType.Home
                           } }
            };



            //byte[] byteArray = john.ToByteArray();

            //byte[] byteArray = ProtoBufUtil.Encode(john.ToByteArray(), 100);


            //给客户端发送一个欢迎消息
            //client.Send(byteArray);
            NetMsg.SendMsg(client, john, (ushort)PB.EnmCmdID.ScPerson);


            //测试代码
            //实现每隔两秒钟给服务器发一个消息
            //这里我们使用了一个定时器
            var timer = new System.Timers.Timer();

            timer.Interval = 2000D;
            timer.Enabled  = true;
            timer.Elapsed += (o, a) =>
            {
                //检测客户端Socket的状态
                if (client.Connected)
                {
                    try
                    {
                        SCPing csPing = new SCPing()
                        {
                            Time = 1
                        };
                        NetMsg.SendMsg(clientSocket, csPing, (ushort)PB.EnmCmdID.ScPing);

                        //使用protobuf
                        Person johnSC = new Person
                        {
                            Id     = 1234,
                            Name   = "Message from server at " + DateTime.Now.ToString(),
                            Email  = "*****@*****.**",
                            Phones = { new Person.Types.PhoneNumber {
                                           Number = "555-4321", Type = PhoneType.Home
                                       } }
                        };

                        //byte[] byteArraySC = johnSC.ToByteArray();
                        //byte[] byteArraySC = ProtoBufUtil.Encode(johnSC.ToByteArray(), 101);
                        //client.Send(byteArraySC);

                        NetMsg.SendMsg(client, johnSC, (ushort)PB.EnmCmdID.ScPerson);

                        //client.Send(Encoding.Unicode.GetBytes("Message from server at " + DateTime.Now.ToString()));
                    }
                    catch (SocketException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
                else
                {
                    timer.Stop();
                    timer.Enabled = false;
                    Console.WriteLine("Client is disconnected, the timer is stop.");
                }
            };
            timer.Start();


            //接收客户端的消息(这个和在客户端实现的方式是一样的)
            client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);

            //准备接受下一个客户端请求
            socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
        }