Example #1
0
        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;
            }
        }
Example #2
0
        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
        }
Example #3
0
        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));
        }
Example #4
0
 public Tuple <int, EndPoint> ReceiveMessage(Buffer buffer)
 {
     return(Tuple.Create(InternalSocket.Receive(Buffer.GetBufferRef(buffer)), InternalSocket.RemoteEndPoint));
 }