示例#1
0
        void OnMessage(FreeNet.Packet packet)
        {
            // ex)
            PROTOCOL_ID protocol = (PROTOCOL_ID)packet.PopProtocolId();

            //Console.WriteLine("------------------------------------------------------");
            //Console.WriteLine("protocol id " + protocol);
            switch (protocol)
            {
            case PROTOCOL_ID.ECHO_REQ:
            {
                string text = packet.PopString();
                Console.WriteLine(string.Format("text {0}", text));

                var response = FreeNet.Packet.Create((short)PROTOCOL_ID.ECHO_ACK);
                response.Push(text);
                packet.Owner.Send(response);
            }
            break;

            default:
            {
                Console.WriteLine("Unknown protocol id " + protocol);
            }
            break;
            }
        }
示例#2
0
        bool OnSystemPacket(FreeNet.Packet packet)
        {
            var session = packet.Owner;

            // active close를 위한 코딩.
            //   서버에서 종료하라고 연락이 왔는지 체크한다.
            //   만약 종료신호가 맞다면 disconnect를 호출하여 받은쪽에서 먼저 종료 요청을 보낸다.
            switch (packet.ProtocolId)
            {
            // 이 처리는 꼭 해줘야 한다.
            case FreeNet.NetworkDefine.SYS_NTF_CONNECTED:
                Console.WriteLine($"SYS_NTF_CONNECTED: {session.UniqueId}");

                var user = new GameUser(session);
                UserList.Add(session.UniqueId, user);
                return(true);

            // 이 처리는 꼭 해줘야 한다.
            case FreeNet.NetworkDefine.SYS_NTF_CLOSED:
                Console.WriteLine($"SYS_NTF_CLOSED: {session.UniqueId}");
                //RefNetworkService.OnSessionClosed(session);
                UserList.Remove(session.UniqueId);
                return(true);

            case FreeNet.NetworkDefine.SYS_START_HEARTBEAT:
                var notifyPkt = new HeartBeatStartNtfPacket();
                notifyPkt.IntervalSec = ServerOpt.ClientHeartBeatIntervalSec;
                var pakcetData = notifyPkt.ToPacket();
                session.Send(new ArraySegment <byte>(pakcetData, 0, pakcetData.Length));
                return(true);
            }

            return(false);
        }
示例#3
0
        bool OnSystemPacket(FreeNet.Packet packet)
        {
            var session = packet.Owner;

            // active close를 위한 코딩.
            //   서버에서 종료하라고 연락이 왔는지 체크한다.
            //   만약 종료신호가 맞다면 disconnect를 호출하여 받은쪽에서 먼저 종료 요청을 보낸다.
            switch (packet.ProtocolId)
            {
            // 이 처리는 꼭 해줘야 한다.
            case FreeNet.NetworkDefine.SYS_NTF_CONNECTED:
                Console.WriteLine("SYS_NTF_CONNECTED : " + session.UniqueId);

                var user = new GameUser(session);
                UserList.Add(session.UniqueId, user);
                return(true);

            // 이 처리는 꼭 해줘야 한다.
            case FreeNet.NetworkDefine.SYS_NTF_CLOSED:
                Console.WriteLine("SYS_NTF_CLOSED : " + session.UniqueId);
                //RefNetworkService.OnSessionClosed(session);
                UserList.Remove(session.UniqueId);
                return(true);


            case FreeNet.NetworkDefine.SYS_START_HEARTBEAT:
                // 순서대로 파싱해야 하므로 프로토콜 아이디는 버린다.
                packet.PopProtocolId();
                // 전송 인터벌.
                byte interval = packet.PopByte();

                session.StartHeartbeat(interval);
                return(true);

            case FreeNet.NetworkDefine.SYS_UPDATE_HEARTBEAT:
                Console.WriteLine("heartbeat : " + DateTime.Now);

                session.LatestHeartbeatTime = DateTime.Now.Ticks;
                return(true);
            }

            return(false);
        }
示例#4
0
        void OnMessage(FreeNet.Packet packet)
        {
            // ex)
            PROTOCOL_ID protocol = (PROTOCOL_ID)packet.ProtocolId;

            //Console.WriteLine("------------------------------------------------------");
            //Console.WriteLine("protocol id " + protocol);
            switch (protocol)
            {
            case PROTOCOL_ID.ECHO_REQ:
            {
                var requestPkt = new EchoPacket();
                requestPkt.Decode(packet.BodyData);
                Console.WriteLine(string.Format("text {0}", requestPkt.Data));

                var responsePkt = new EchoPacket();
                var packetData  = responsePkt.ToPacket(PROTOCOL_ID.ECHO_ACK, packet.BodyData);
                packet.Owner.Send(new ArraySegment <byte>(packetData, 0, packetData.Length));
            }
            break;

            case PROTOCOL_ID.HEARTBEAT_UPDATE_NOTIFY:
            {
                Console.WriteLine($"heartbeat: {DateTime.Now}");

                packet.Owner.LatestHeartbeatTime = (UInt64)DateTime.Now.Ticks;
            }
            break;

            default:
            {
                if (OnSystemPacket(packet) == false)
                {
                    Console.WriteLine("Unknown protocol id " + protocol);
                }
            }
            break;
            }
        }