/// <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); }
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(); }
private static void Send(string msg) { if (client == null) { return; } byte[] bytes = Encoding.UTF8.GetBytes(msg + "ENDOFMSG"); client.SendAsync(bytes); }
public Task SendAsync(string message) { return(socket.IsConnected ? socket.SendAsync(Convert(message + "\n")) : null); }
public async void SendCommand(string command) { // Create CommandPacket and send var commandPacket = new CommandPacketModel(command); await _client.SendAsync(commandPacket.ToBytes()); }
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(); }
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(); }
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(); }
public void SendCommand(string command) { // Create CommandPacket and send RCONCommandPacket commandPacket = new RCONCommandPacket(command); Client.SendAsync(commandPacket.ToBytes()); }