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); }
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)); } }