예제 #1
0
        private void Relay(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            ReadLineEventArgs eventArgs = new ReadLineEventArgs();

            eventArgs.packet = packet;

            ReadLine(this, eventArgs);
        }
예제 #2
0
        public virtual void ReplyInquiryEcho(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length != 5)
            {
                return;
            }

            Relay(peer, socket, packet);
        }
예제 #3
0
        public virtual void NotifyAreaPeer(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length != 3)
            {
                return;
            }

            Relay(peer, socket, packet);
        }
예제 #4
0
        public virtual void ReceiveReservedCode(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length <= 0)
            {
                return;
            }

            Relay(peer, socket, packet);
        }
예제 #5
0
        // 632 Client->Server
        public virtual void ReplyPeerId(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length != 1)
            {
                return;
            }

            int peerId = 0;

            if (!int.TryParse(packet.Data[0], out peerId))
            {
                return;
            }

            // FIXME: 多重接続チェックしてない.
            peer.PeerData.PeerId = peerId;
        }
예제 #6
0
        // 634 Client->Server
        public virtual void ReplyProtocolVersion(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length != 3)
            {
                return;
            }

            double version = 0.0;

            if (!double.TryParse(packet.Data[0], out version))
            {
                return;
            }

            if (version < Const.ALLOW_PROTOCOL_VERSION)
            {
                socket.WriteLine("694 1 Protocol_version_incompatible");
                socket.Close();
                return;
            }

            socket.WriteLine("612 1");
        }
예제 #7
0
        // 614 Server->Client
        public virtual void RequireProtocolVersion(Manager.Peer peer, CRLFSocket socket, Packet packet)
        {
            if (packet.Data == null || packet.Data.Length != 3)
            {
                return;
            }

            double version = 0.0;

            if (!double.TryParse(packet.Data[0], out version))
            {
                return;
            }

            if (version < Const.ALLOW_PROTOCOL_VERSION)
            {
                socket.WriteLine("694 1 Protocol_version_incompatible");
                socket.Close();
                return;
            }

            string[] datas = { Const.PROTOCOL_VERSION, Const.SOFTWARE_NAME, Const.SOFTWARE_VERSION };
            socket.WriteLine("634 1 " + string.Join(":", datas));
        }
예제 #8
0
 public virtual void InvalidOperation(Manager.Peer peer, CRLFSocket socket, Packet packet)
 {
     socket.Close();
 }
예제 #9
0
 public virtual void InvalidProtocolVersion(Manager.Peer peer, CRLFSocket socket, Packet packet)
 {
     socket.Close();
 }
예제 #10
0
 public virtual void ReplyPeerEcho(Manager.Peer peer, CRLFSocket socket, Packet packet)
 {
     // 何もしない。
 }
예제 #11
0
 public virtual void RequirePeerEcho(Manager.Peer peer, CRLFSocket socket, Packet packet)
 {
     socket.WriteLine("631 1");
 }
예제 #12
0
 // 612 Server->Client
 public virtual void RequirePeerId(Manager.Peer peer, CRLFSocket socket, Packet packet)
 {
     socket.WriteLine("632 1 " + peer.GetParentPeerId());
 }