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); } }
/*---------------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); }
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; }
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; }
//发送一个文字信息在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) }
// 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) { }
protected static void SendLoopPacket(NetSrc src, int length, byte[] data, IPEndPoint to) { }
// function NET_AllocMsg(Size: UInt): PNetQueue; public static bool GetPacket(NetSrc source) { return(false); }