Ejemplo n.º 1
0
        public Task <SocketMessage> AsyncConnect(string host, int port)
        {
            int connectionID = MakeConnectionUUID();
            var task         = new TaskCompletionSource <SocketMessage>();
            var taskID       = MakeAsyncOpUUID();

            taskMap.Add(taskID, task);
            try
            {
                MoonConnection connection = new MoonConnection(connectionID)
                {
                    OnMessage = PushMessage
                };
                connections.Add(connectionID, connection);
                Socket socket = connection.Socket;
                socket.BeginConnect(host, port, (ar) =>
                {
                    try
                    {
                        Socket s = (Socket)ar.AsyncState;
                        s.EndConnect(ar);
                        PushMessage(new SocketMessage(connectionID, SocketMessageType.Connect, null, taskID));
                        connection.ReadHead();
                    }
                    catch (SocketException se)
                    {
                        PushMessage(new SocketErrorMessage(0, SocketMessageType.Connect, se.ErrorCode, se.Message, taskID));
                    }
                    catch (Exception e)
                    {
                        PushMessage(new SocketErrorMessage(0, SocketMessageType.Connect, 0, e.Message, taskID));
                    }
                }, socket);
            }
            catch (SocketException se)
            {
                connections.Remove(connectionID);
                PushMessage(new SocketErrorMessage(0, SocketMessageType.Connect, se.ErrorCode, se.Message, taskID));
            }
            catch (Exception e)
            {
                connections.Remove(connectionID);
                PushMessage(new SocketErrorMessage(0, SocketMessageType.Connect, 0, e.Message, taskID));
            }
            return(task.Task);
        }
Ejemplo n.º 2
0
        public SocketMessage Connect(string host, int port)
        {
            int connectionID = MakeConnectionUUID();

            try
            {
                MoonConnection connection = new MoonConnection(connectionID)
                {
                    OnMessage = PushMessage
                };
                connection.Socket.Connect(host, port);
                connections.Add(connectionID, connection);
                connection.ReadHead();
                return(new SocketMessage(connectionID, SocketMessageType.Connect, null, 0));
            }
            catch (SocketException se)
            {
                return(new SocketErrorMessage(connectionID, SocketMessageType.Connect, se.ErrorCode, se.Message));
            }
            catch (Exception e)
            {
                return(new SocketErrorMessage(connectionID, SocketMessageType.Connect, -1, e.Message));
            }
        }