コード例 #1
0
        private void Push(ulong time)
        {
            UdpNode node = UdpNodeManager.NextPusher(time);

            if (node != null)
            {
                this.SendDatagram(new UdpItem
                {
                    Data     = UdpOutbound.AddIps(node.IP, time),
                    EndPoint = node.EndPoint,
                    Msg      = UdpMsg.OP_SERVERLIST_ADDIPS
                });
            }
        }
        private static void LoadDefaultList()
        {
            Nodes = new List <UdpNode>();

            using (FileStream fs = new FileStream("servers.dat", FileMode.Open, FileAccess.Read))
            {
                byte[] buffer = new byte[6];

                while (fs.Read(buffer, 0, buffer.Length) == 6)
                {
                    UdpNode node = new UdpNode();
                    node.IP   = new IPAddress(buffer.Take(4).ToArray());
                    node.Port = BitConverter.ToUInt16(buffer.ToArray(), 4);
                    Nodes.Add(node);
                }
            }

            ServerCore.Log("default node list loaded");
        }
コード例 #3
0
        public static void Add(UdpNode server)
        {
            if (!server.IP.Equals(Settings.ExternalIP))
            {
                UdpNode sobj = Nodes.Find(s => s.IP.Equals(server.IP));

                if (sobj != null)
                {
                    sobj.Port = server.Port;
                }
                else
                {
                    if (Nodes.Count > 4000)
                    {
                        Nodes.Sort((x, y) => x.LastConnect.CompareTo(y.LastConnect));
                        Nodes.RemoveRange(0, 250);
                    }

                    Nodes.Add(server);
                }
            }
        }
コード例 #4
0
        private static void AckIps(UdpItem item, UdpListener udp, ulong time)
        {
            UdpStats.ACKIPS++;
            UdpPacketReader packet = new UdpPacketReader(item.Data);
            ushort          port   = packet;
            UdpNode         node   = UdpNodeManager.Find(x => x.IP.Equals(((IPEndPoint)item.EndPoint).Address));

            if (node != null)
            {
                node.Port = port;
                node.Ack++;
                node.LastConnect = time;
                node.Try         = 0;
            }

            while (packet.Remaining > 5)
            {
                UdpNode n = new UdpNode();
                n.IP   = packet;
                n.Port = packet;
                UdpNodeManager.Add(n);
            }
        }
 public UdpChannelItem(UdpNode addr)
 {
     this.IP   = addr.IP;
     this.Port = addr.Port;
 }