private static void MessageReceiveThread(ISocket socket, Buffer buffer, MessageThreadCallback callback) { int bytes; switch (socket.GetProtocolType()) { case ProtocolType.Tcp: bytes = socket.GetSocket().Receive(Buffer.GetBufferRef(buffer)); callback(bytes); break; case ProtocolType.Udp: EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); bytes = socket.GetSocket().ReceiveFrom(Buffer.GetBufferRef(buffer), ref remoteEndPoint); callback(bytes, remoteEndPoint); break; default: callback(-1); break; } }
public static Tuple <int, EndPoint> ReceiveMessage(ISocket socket, Buffer buffer, SocketCommunicationTypes type = SocketCommunicationTypes.Blocking, MessageThreadCallback callback = null) { if (type == SocketCommunicationTypes.Blocking) { switch (socket.GetSocket().ProtocolType) { case ProtocolType.Tcp: return(Tuple.Create(socket.GetSocket().Receive(Buffer.GetBufferRef(buffer)), socket.GetSocket().RemoteEndPoint)); case ProtocolType.Udp: EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); return(Tuple.Create(socket.GetSocket().ReceiveFrom(Buffer.GetBufferRef(buffer), ref remoteEndPoint), remoteEndPoint)); default: throw new ConstraintException("Socket must be of type TCP or UDP."); } } if (callback == null) { throw new ArgumentNullException(string.Format("{0}=null; You must provide a valid callback when using the NonBlocking type", "callback")); } new Thread(() => MessageReceiveThread(socket, buffer, callback)).Start(); return(Tuple.Create(-1, new IPEndPoint(-1, -1) as EndPoint)); //Return negative 1 as 0 bytes received is valid and we want an invalid value }
public Tuple <int, EndPoint> ReceiveMessage(string ip, int port, Buffer buffer) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); return(Tuple.Create(InternalSocket.ReceiveFrom(Buffer.GetBufferRef(buffer), ref remoteEndPoint), remoteEndPoint)); }
public Tuple <int, EndPoint> ReceiveMessage(Buffer buffer) { return(Tuple.Create(InternalSocket.Receive(Buffer.GetBufferRef(buffer)), InternalSocket.RemoteEndPoint)); }