public void Run(ICdpServer server, Byte[] maxDatagramBuffer, ICdpTimeout timeout) { Cdp.UdpServerLoop(server, udpSocket, endPoint, maxDatagramBuffer, timeout); }
static Int32 Main(string[] args) { CdpCatOptions optionsParser = new CdpCatOptions(); if (args.Length <= 0) { optionsParser.PrintUsage(); return(-1); } List <String> nonOptionArgs = optionsParser.Parse(args); Cdp.StaticInit(optionsParser.maxPayload.ArgValue); ICdpTimeout timeout = new MyCdpTimeout(); if (optionsParser.listenPort.set) { IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, optionsParser.listenPort.ArgValue); MyCdpServer cdpServer = new MyCdpServer(); Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Cdp.UdpServerLoop(cdpServer, udpSocket, localEndPoint, new Byte[optionsParser.maxPayload.ArgValue], timeout); return(-1); } else { if (nonOptionArgs.Count < 2) { Console.WriteLine("Missing command line arguments"); optionsParser.PrintUsage(); return(-1); } UInt16 port = UInt16.Parse(nonOptionArgs[1]); EndPoint serverEndPoint = new IPEndPoint(EndPoints.ParseIPOrResolveHost(nonOptionArgs[0], DnsPriority.IPv4ThenIPv6), port); UdpConnectedClientTransmitter udpTransmitter = new UdpConnectedClientTransmitter(serverEndPoint); CdpTransmitter transmitter = new CdpTransmitter(udpTransmitter); UInt32 offset; Byte[] myMessage; Byte[] payloadBuffer; transmitter.SendHearbeat(); myMessage = Encoding.UTF8.GetBytes("This should be a random payload"); payloadBuffer = transmitter.RequestSendBuffer((UInt32)myMessage.Length, out offset); Array.Copy(myMessage, 0, payloadBuffer, offset, myMessage.Length); transmitter.ControllerSendRandomPayload(offset + (UInt32)myMessage.Length); myMessage = Encoding.UTF8.GetBytes("This should be the first payload with no immediate ack"); payloadBuffer = transmitter.RequestSendBuffer((UInt32)myMessage.Length, out offset); Array.Copy(myMessage, 0, payloadBuffer, offset, (UInt32)myMessage.Length); transmitter.ControllerSendPayloadNoAck(offset + (UInt32)myMessage.Length); myMessage = Encoding.UTF8.GetBytes("This should be the second payload with no immediate ack"); payloadBuffer = transmitter.RequestSendBuffer((UInt32)myMessage.Length, out offset); Array.Copy(myMessage, 0, payloadBuffer, offset, (UInt32)myMessage.Length); transmitter.ControllerSendPayloadNoAck(offset + (UInt32)myMessage.Length); // // Send and wait for ack // myMessage = Encoding.UTF8.GetBytes("This should be a normal payload with an immediate ack"); payloadBuffer = transmitter.RequestSendBuffer((UInt32)myMessage.Length, out offset); Array.Copy(myMessage, 0, payloadBuffer, offset, myMessage.Length); offset += (UInt32)myMessage.Length; transmitter.ControllerSendPayloadWithAck(offset, timeout); transmitter.SendHaltNoPayload(); return(0); } }