Пример #1
0
    public void SendPacket(NetSrc src, int length, byte[] data, IPEndPoint to)
    {
        // if(CConstVar.ShowPacket > 0){ // && *(int *)data == -1
        //  CLog.Info("send packet {0}", length * 4);
        // }

        if (IPAddress.IsLoopback(to.Address))
        {
            SendLoopPacket(src, length, data, to);
            return;
        }
        // if(to.Address.)

        if (src == NetSrc.CLIENT && CConstVar.PacketDelayClient > 0)
        {
            QueuePacket(length, data, to, CConstVar.PacketDelayClient);
        }
        else if (src == NetSrc.SERVER && CConstVar.PacketDelayServer > 0)
        {
            QueuePacket(length, data, to, CConstVar.PacketDelayServer);
        }
        else
        {
            updSocket.SendMsg(data, length, to);
        }
    }
Пример #2
0
    /*---------------LOOPBACK---------------*/
    public bool GetLoopPacket(NetSrc src, out IPEndPoint from, out MsgPacket msg)
    {
        from = new IPEndPoint(IPAddress.Loopback, 0);
        msg  = new MsgPacket();

        Loopback loop = loopbacks[(int)src];

        if (loop.send - loop.get > CConstVar.MAX_LOOPBACK)
        {
            loop.get = loop.send - CConstVar.MAX_LOOPBACK;
        }

        if (loop.get >= loop.send)
        {
            return(false);
        }

        int i = loop.get & (CConstVar.MAX_LOOPBACK - 1);

        loop.get++;
        Array.Copy(loop.msgs[i].data, msg.Data, loop.msgs[i].datalen);
        msg.CurSize = loop.msgs[i].datalen;

        from.Address = IPAddress.Loopback;
        return(true);
    }
Пример #3
0
 public void SetUp(NetSrc src, IPEndPoint from, int challenge, int qport)
 {
     this.src              = src;
     this.remoteAddress    = from;
     this.qport            = qport;
     this.incomingSequence = 0;
     this.outgoingSequence = 1;
     this.challenge        = challenge;
 }
Пример #4
0
 public void NetChanSetup(NetSrc src, IPEndPoint from, int qport, int challenge)
 {
     netChan.src              = src;
     netChan.remoteAddress    = from;
     netChan.qport            = qport;
     netChan.incomingSequence = 0;
     netChan.outgoingSequence = 1;
     netChan.challenge        = challenge;
 }
Пример #5
0
    //发送一个文字信息在out of band,用于"connect"
    //而在c#中并没有暴露底层的接口来支持显式发送oob,所以用第一位来表示是否是带外数据
    public void OutOfBandSend(NetSrc src, IPEndPoint address, string format)
    {
        var charArr = System.Text.Encoding.Default.GetBytes(format);

        byte[] a = new byte[4 + charArr.Length];
        a[0] = 0xff;
        a[1] = 0xff;
        a[2] = 0xff;
        a[3] = 0xff;

        Array.Copy(charArr, 0, a, 4, charArr.Length);

        IPEndPoint newA = new IPEndPoint(address.Address, address.Port);

        // newA.Address = IPAddress.Broadcast;

        SendPacket(src, a.Length, a, newA);
        // SendPacket(src, str)
    }
Пример #6
0
        //   TempBuffer: Pointer; // W 8424
        //   TempBufferSize: UInt32; // W 8428

        //   Flow: array[TFlowSrc] of TNetchanFlowData; // W 8432    flow data size = 536



        public static void OutOfBandPrint(NetSrc source, NetAdr addr, string s)
        {
        }
Пример #7
0
 protected static void SendLoopPacket(NetSrc src, int length, byte[] data, IPEndPoint to)
 {
 }
Пример #8
0
        //   function NET_AllocMsg(Size: UInt): PNetQueue;

        public static bool GetPacket(NetSrc source)
        {
            return(false);
        }