Пример #1
0
        /// <summary>
        /// Logs in to specified Syncano Instance over specified ApiKey.
        /// </summary>
        /// <param name="apiKey">Api Key of Syncano Instance (user or backend).</param>
        /// <param name="instanceName">Name of Syncano Instance.</param>
        /// <returns>Task performing login operation and returning LoginResult object.</returns>
        public Task <LoginResult> Login(string apiKey, string instanceName)
        {
            var request = new LoginRequest {
                InstanceName = instanceName, ApiKey = apiKey, AuthKey = _authKey, SessionId = _sessionId
            };

            var t = _messagesObservable.FirstAsync().Select(ToLoginResult)
                    .FirstAsync().Timeout(TimeSpan.FromSeconds(10))
                    .Do(r => { _isAuthenticated = r.WasSuccessful; })
                    .ToTask();

            _client.SendAsync(CreateRequest(request));

            return(t);
        }
Пример #2
0
        public void when_connected_then_can_exchange_fixed_length_messages()
        {
            var serverReceives = new List <string>();
            var clientReceives = new List <string>();

            var server = new ReactiveListener(1055);

            server.Start();

            Func <IObservable <byte>, IObservable <string> > parse =
                socket => from header in socket.Buffer(4)
                let length                       = BitConverter.ToInt32(header.ToArray(), 0)
                                        let body = socket.Take(length)
                                                   select Encoding.UTF8.GetString(body.ToEnumerable().ToArray());

            Func <string, byte[]> convert = s =>
            {
                var body    = Encoding.UTF8.GetBytes(s);
                var header  = BitConverter.GetBytes(body.Length);
                var payload = header.Concat(body).ToArray();

                return(payload);
            };

            server.Connections.Subscribe(socket =>
            {
                Console.WriteLine("Server socket created: {0}", socket.GetHashCode());

                parse(socket.Receiver).Subscribe(
                    x => serverReceives.Add(x.Trim()),
                    e => Console.WriteLine("Server socket error: {0}", e.Message),
                    () => Console.WriteLine("Server socket completed"));

                socket.SendAsync(convert("Welcome!")).Wait();
            });

            var client = new ReactiveClient("127.0.0.1", 1055);

            Console.WriteLine("Client socket created: {0}", client.GetHashCode());

            client.ConnectAsync().Wait();

            parse(client.Receiver).Subscribe(
                x => clientReceives.Add(x.Trim()),
                e => Console.WriteLine("Client socket error: {0}", e.Message),
                () => Console.WriteLine("Client socket completed"));

            client.SendAsync(convert("Hello")).Wait();

            Thread.Sleep(100);

            Assert.Equal(1, serverReceives.Count);
            Assert.Equal(1, clientReceives.Count);
            Assert.Equal("Welcome!", clientReceives[0]);
            Assert.Equal("Hello", serverReceives[0]);

            server.Dispose();
        }
Пример #3
0
 private static void Send(string msg)
 {
     if (client == null)
     {
         return;
     }
     byte[] bytes = Encoding.UTF8.GetBytes(msg + "ENDOFMSG");
     client.SendAsync(bytes);
 }
Пример #4
0
 public Task SendAsync(string message)
 {
     return(socket.IsConnected ? socket.SendAsync(Convert(message + "\n")) : null);
 }
Пример #5
0
 public async void SendCommand(string command)
 {
     // Create CommandPacket and send
     var commandPacket = new CommandPacketModel(command);
     await _client.SendAsync(commandPacket.ToBytes());
 }
Пример #6
0
        public void when_connected_then_can_exchange_fixed_length_messages()
        {
            var serverReceives = new List<string>();
            var clientReceives = new List<string>();

            var server = new ReactiveListener(1055);
            server.Start();

            Func<IObservable<byte>, IObservable<string>> parse =
                socket => from header in socket.Buffer(4)
                          let length = BitConverter.ToInt32(header.ToArray(), 0)
                          let body = socket.Take(length)
                          select Encoding.UTF8.GetString(body.ToEnumerable().ToArray());

            Func<string, byte[]> convert = s =>
            {
                var body = Encoding.UTF8.GetBytes(s);
                var header = BitConverter.GetBytes(body.Length);
                var payload = header.Concat(body).ToArray();

                return payload;
            };

            server.Connections.Subscribe(socket =>
            {
                Console.WriteLine("Server socket created: {0}", socket.GetHashCode());

                parse(socket.Receiver).Subscribe(
                    x => serverReceives.Add(x.Trim()),
                    e => Console.WriteLine("Server socket error: {0}", e.Message),
                    () => Console.WriteLine("Server socket completed"));

                socket.SendAsync(convert("Welcome!")).Wait();
            });

            var client = new ReactiveClient("127.0.0.1", 1055);
            Console.WriteLine("Client socket created: {0}", client.GetHashCode());

            client.ConnectAsync().Wait();

            parse(client.Receiver).Subscribe(
                x => clientReceives.Add(x.Trim()),
                e => Console.WriteLine("Client socket error: {0}", e.Message),
                () => Console.WriteLine("Client socket completed"));

            client.SendAsync(convert("Hello")).Wait();

            Thread.Sleep(100);

            Assert.Equal(1, serverReceives.Count);
            Assert.Equal(1, clientReceives.Count);
            Assert.Equal("Welcome!", clientReceives[0]);
            Assert.Equal("Hello", serverReceives[0]);

            server.Dispose();
        }
Пример #7
0
        public void when_client_reconnects_then_can_exchange_fixed_length_messages()
        {
            var serverReceives = new List<string>();
            var clientReceives = new List<string>();
            var messageLength = 32;

            var server = new ReactiveListener(1055);
            server.Start();

            Func<IObservable<byte>, IObservable<string>> parse =
                socket => from message in socket.Buffer(messageLength)
                          select Encoding.UTF8.GetString(message.ToArray());

            Func<string, byte[]> convert = s =>
            {
                return Encoding.UTF8.GetBytes(new string(' ', messageLength - s.Length) + s);
            };

            server.Connections.Subscribe(socket =>
            {
                Console.WriteLine("Server socket created: {0}", socket.GetHashCode());

                parse(socket.Receiver).Subscribe(
                    x => serverReceives.Add(x.Trim()),
                    e => Console.WriteLine("Server socket error: {0}", e.Message),
                    () => Console.WriteLine("Server socket completed"));

                socket.SendAsync(convert("Welcome!")).Wait();
            });

            var client = new ReactiveClient("127.0.0.1", 1055);
            Console.WriteLine("Client socket created: {0}", client.GetHashCode());

            client.ConnectAsync().Wait();

            parse(client.Receiver).Subscribe(
                x => clientReceives.Add(x.Trim()),
                e => Console.WriteLine("Client socket error: {0}", e.Message),
                () => Console.WriteLine("Client socket completed"));

            client.SendAsync(convert("Hello")).Wait();

            Thread.Sleep(1200);

            // Give it time to detect the disconnection from the server.
            while (client.IsConnected)
                client.SendAsync(new byte[1]);

            Assert.Throws<InvalidOperationException>(() => client.SendAsync(convert("World")).Wait());

            client.Disconnect();
            client.Dispose();

            var tcp = new TcpClient("127.0.0.1", 1055);
            var bytes = convert("World");
            tcp.GetStream().Write(bytes, 0, bytes.Length);

            //client = new TcpClientSocket("127.0.0.1", 1055);

            //// Reconnect ansd send one more string.
            //client.ConnectAsync().Wait();
            //client.SendAsync(convert("World")).Wait();

            Thread.Sleep(1200);

            //while (serverReceives.Count < 2)
            //    Thread.Sleep(100);

            // Fails :(
            Assert.Equal("World", serverReceives.Last());

            client.Dispose();
            server.Dispose();
        }
Пример #8
0
        public void when_client_reconnects_then_can_exchange_fixed_length_messages()
        {
            var serverReceives = new List <string>();
            var clientReceives = new List <string>();
            var messageLength  = 32;

            var server = new ReactiveListener(1055);

            server.Start();

            Func <IObservable <byte>, IObservable <string> > parse =
                socket => from message in socket.Buffer(messageLength)
                select Encoding.UTF8.GetString(message.ToArray());

            Func <string, byte[]> convert = s =>
            {
                return(Encoding.UTF8.GetBytes(new string(' ', messageLength - s.Length) + s));
            };

            server.Connections.Subscribe(socket =>
            {
                Console.WriteLine("Server socket created: {0}", socket.GetHashCode());

                parse(socket.Receiver).Subscribe(
                    x => serverReceives.Add(x.Trim()),
                    e => Console.WriteLine("Server socket error: {0}", e.Message),
                    () => Console.WriteLine("Server socket completed"));

                socket.SendAsync(convert("Welcome!")).Wait();
            });

            var client = new ReactiveClient("127.0.0.1", 1055);

            Console.WriteLine("Client socket created: {0}", client.GetHashCode());

            client.ConnectAsync().Wait();

            parse(client.Receiver).Subscribe(
                x => clientReceives.Add(x.Trim()),
                e => Console.WriteLine("Client socket error: {0}", e.Message),
                () => Console.WriteLine("Client socket completed"));

            client.SendAsync(convert("Hello")).Wait();

            Thread.Sleep(1200);

            // Give it time to detect the disconnection from the server.
            while (client.IsConnected)
            {
                client.SendAsync(new byte[1]);
            }

            Assert.Throws <InvalidOperationException>(() => client.SendAsync(convert("World")).Wait());

            client.Disconnect();
            client.Dispose();

            var tcp   = new TcpClient("127.0.0.1", 1055);
            var bytes = convert("World");

            tcp.GetStream().Write(bytes, 0, bytes.Length);

            //client = new TcpClientSocket("127.0.0.1", 1055);

            //// Reconnect ansd send one more string.
            //client.ConnectAsync().Wait();
            //client.SendAsync(convert("World")).Wait();

            Thread.Sleep(1200);

            //while (serverReceives.Count < 2)
            //    Thread.Sleep(100);

            // Fails :(
            Assert.Equal("World", serverReceives.Last());

            client.Dispose();
            server.Dispose();
        }
Пример #9
0
 public void SendCommand(string command)
 {
     // Create CommandPacket and send
     RCONCommandPacket commandPacket = new RCONCommandPacket(command);
     Client.SendAsync(commandPacket.ToBytes());
 }