Example #1
0
        static void Main(string[] args)
        {
            ISocketClient client = null;
            try
            {
                string server = args.Length > 0 ? args[0] : null;
                int port = args.Length > 1 ? Int32.Parse(args[1]) : cDefaultPort;
                string mode = args.Length > 2 ? args[2] : "sub";
                int count = args.Length > 3 ? Int32.Parse(args[3]) : cDefaultCount;
                string pubdata = args.Length > 4 ? args[4] : "{0}\r\n";

                Info("DOTNET-SOCKETS Client");

                client = new AsyncSocketClient(server, port);
                client.Connected += (sender, b) =>
                {
                    Debug("DOTNET-SOCKET Client: connected");
                };
                client.Disconnected += (sender, b) =>
                {
                    Debug("DOTNET-SOCKET Client: disconnected");
                };
                client.Error += (sender, err) =>
                {
                    Error("DOTNET-SOCKET Client", err.Value);
                };
                client.Sent += (sender, size) =>
                {
                    Debug("DOTNET-SOCKET Client: Sent [{0}] bytes of data", size);
                };
                client.ReceivedData += (sender, data) =>
                {
                    string msg = System.Text.Encoding.UTF8.GetString(data.Data, 0, data.Size);
                    Debug("DOTNET-SOCKET Client: Received [{0}] bytes of data", data.Size);
                    Debug("DOTNET-SOCKET Client: {0}", msg);
                };
                client.Log += (sender, a) =>
                {
                    Log(a.Level, a.Message, a.Exception, a.Args);
                };

                client.Open().Wait();
                if (mode == "pub")
                    Publish(client, pubdata, count);
                else
                    Subscribe(client, count);
            }
            catch (Exception ex)
            {
                Error("DOTNET-SOCKET Client", ex);
            }
            finally
            {
                Info("DOTNET-SOCKET Client closing");
                if (client != null)
                    client.Close().Wait();
                Info("DOTNET-SOCKET Client done");
            }
        }
 public AsyncSocketClientTest(ITestOutputHelper output)
 {
     _log = new MockLog(output);
     _server = new MockTcpServer(_log);
     _log.Debug("AsyncSocketClientTest: Start mock server");
     _server.Start();
     _client = new AsyncSocketClient("127.0.0.1", MockTcpServer.cPort);            
 }
        public Task<ISocketClient> Accept()
        {
            try
            {
                if (_socket == null)
                    return Task<ISocketClient>.FromResult<ISocketClient>(null);

                var tcs = new TaskCompletionSource<ISocketClient>(_socket);
                _socket.BeginAccept((ar) =>
                {
                    try
                    {
                        var t = (TaskCompletionSource<ISocketClient>)ar.AsyncState;
                        var s = (Socket)t.Task.AsyncState;
                        try
                        {
                            ISocketClient client = new AsyncSocketClient(s.EndAccept(ar));
                            HandleClient(client);
                            _clients.Add(client);
                            RaiseConnected(client);
                            t.TrySetResult(client);
                        }
                        catch (Exception exc)
                        {
                            RaiseError(exc);
                            t.TrySetException(exc);
                        }
                    }
                    catch (Exception ex)
                    {
                        RaiseError(ex);
                        tcs.TrySetException(ex);
                    }
                }, tcs);
                return tcs.Task;
            }
            catch (Exception ex)
            {
                RaiseError(ex);
            }
            return Task<ISocketClient>.FromResult<ISocketClient>(null);
        }