コード例 #1
0
        public void AddJsonServer(JsonServer arg_json_server)
        {
            list_json_server.Add(arg_json_server);
            ServerConnection server_connection = new ServerConnection(arg_json_server.ServerURL, arg_json_server.ServerId);

            list_server_connection.Add(server_connection);
        }
コード例 #2
0
        private async Task CallBuiltinVersionServiceCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            // event handlers
            var connected    = 0;
            var disconnected = 0;

            js.ClientConnected    += (s, e) => connected++;
            js.ClientDisconnected += (s, e) => disconnected++;
            js.UnhandledException += (s, e) => Assert.Fail($"Unhandled server exception: {e.Exception}. Connected: {connected}, disconnected: {disconnected}.");
            jc.UnhandledException += (s, e) => Assert.Fail($"Unhandled client exception: {e.Exception}. Connected: {connected}, disconnected: {disconnected}.");

            // start json server and connect the client
            js.Start();

            Assert.IsNull(jc.SessionId);
            var sessionId = await jc.ConnectAsync(credentials);

            Assert.IsNotNull(jc.SessionId);
            Assert.AreEqual(sessionId, jc.SessionId);

            // call Version
            var msg    = new VersionRequest();
            var result = await Assert_NotTimedOut(jc.Call(msg), "jc.Call(VersionRequest)");

            Assert.NotNull(result);
            Assert.AreEqual(nameof(JsonServices), result.ProductName);
            Assert.NotNull(result.ProductVersion);
            Assert.NotNull(result.EngineVersion);

            // make sure all incoming messages are processed
            Assert.AreEqual(0, jc.PendingMessages.Count);
        }
コード例 #3
0
        protected async Task CallDisconnectAndReconnectCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            js.ProductName    = "My awesome server";
            js.ProductVersion = "1.2.3.4";
            js.Start();

            // connect, call, disconnect
            await Assert_NotTimedOut(jc.ConnectAsync(credentials), "connect");

            var result = await Assert_NotTimedOut(jc.Call(new VersionRequest()), "jc.Call(VersionRequest)");

            Assert.NotNull(result);
            Assert.AreEqual(js.ProductName, result.ProductName);
            Assert.AreEqual(js.ProductVersion, result.ProductVersion);
            await Assert_NotTimedOut(jc.DisconnectAsync(), "disconnect");

            // reconnect, call, disconnect
            await Assert_NotTimedOut(jc.ConnectAsync(credentials), "reconnect");

            result = await Assert_NotTimedOut(jc.Call(new VersionRequest()), "jc.Call(VersionRequest) after reconnect");

            Assert.NotNull(result);
            Assert.AreEqual(js.ProductName, result.ProductName);
            Assert.AreEqual(js.ProductVersion, result.ProductVersion);
            await Assert_NotTimedOut(jc.DisconnectAsync(), "disconnect completely");

            Assert.AreEqual(0, jc.PendingMessages.Count);
        }
コード例 #4
0
        protected async Task CallUnregisteredServiceCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            // event handlers
            var connected    = 0;
            var disconnected = 0;

            js.ClientConnected    += (s, e) => connected++;
            js.ClientDisconnected += (s, e) => disconnected++;
            js.UnhandledException += (s, e) => Assert.Fail($"Unhandled server exception: {e.Exception}. Connected: {connected}, disconnected: {disconnected}.");
            jc.UnhandledException += (s, e) => Assert.Fail($"Unhandled client exception: {e.Exception}. Connected: {connected}, disconnected: {disconnected}.");

            // start json server and connect the client
            js.Start();
            await jc.ConnectAsync(credentials);

            // call UnregisteredService
            var msg = new UnregisteredService();
            var ex  = Assert.ThrowsAsync <MethodNotFoundException>(async() =>
                                                                   await Assert_NotTimedOut(jc.Call(msg), "jc.Call(UnregisteredService)"));

            Assert.AreEqual(MethodNotFoundException.ErrorCode, ex.Code);

            // make sure all incoming messages are processed
            Assert.AreEqual(0, jc.PendingMessages.Count);
        }
コード例 #5
0
        public async Task JsonClientSupportsFilteredSubscriptionsAndUnsubscriptionsUsingFleckServer()
        {
            // fake transport and serializer
            var server           = new StubServer();
            var serverSerializer = new Serializer();
            var serverProvider   = new StubMessageTypeProvider();
            var executor         = new StubExecutor();

            var client           = new StubClient(server, "jc");
            var clientProvider   = new StubMessageTypeProvider();
            var clientSerializer = new Serializer();

            var secondClient           = new StubClient(server, "sc");
            var secondClientProvider   = new StubMessageTypeProvider();
            var secondClientSerializer = new Serializer();

            // json server and client
            using (var js = new JsonServer(server, serverProvider, serverSerializer, executor, AuthProvider))
                using (var jc = new JsonClient(client, clientProvider, clientSerializer))
                    using (var sc = new JsonClient(secondClient, secondClientProvider, secondClientSerializer))
                    {
                        // set names for easier debugging
                        jc.DebugName = "First";
                        sc.DebugName = "Second";

                        // execute core test
                        await TestFilteredSubscriptionsAndUnsubscriptionsCore(js, jc, sc, Credentials);
                    }
        }
コード例 #6
0
        protected async Task CallGenericMessagesCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            js.Start();
            await jc.ConnectAsync();

            var intMsg = new GenericRequest <int> {
                Value = 1
            };
            var intResult = await jc.Call(intMsg);

            Assert.AreEqual(2, intResult.Result);

            var dtMsg = new GenericRequest <DateTime> {
                Value = new DateTime(2018, 12, 18)
            };
            var dtResult = await jc.Call(dtMsg);

            Assert.AreEqual(new DateTime(2019, 12, 18), dtResult.Result);

            var strMsg = new GenericRequest <string> {
                Value = "World"
            };
            var strResult = await jc.Call(strMsg);

            Assert.AreEqual("Hello World!", strResult.Result);

            var boolMsg = new GenericRequest <bool> {
                Value = true
            };

            Assert.ThrowsAsync <MethodNotFoundException>(async() => await jc.Call(boolMsg));

            // make sure all incoming messages are processed
            Assert.AreEqual(0, jc.PendingMessages.Count);
        }
コード例 #7
0
        public void SrpAuthenticationFailsOnBadCredentials()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            // json server and client
            using (var js = new JsonServer(server, provider, serializer, executor, AuthProvider))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    // default credentials
                    var ex = Assert.ThrowsAsync <AuthFailedException>(async() =>
                                                                      await CallGetVersionServiceCore(js, jc));
                    Assert.AreEqual("No credentials specified", ex.Message);

                    // invalid credentials
                    ex = Assert.ThrowsAsync <AuthFailedException>(async() =>
                                                                  await CallGetVersionServiceCore(js, jc, new SrpCredentials("root", "beer")));
                    Assert.AreEqual("Authentication failed", ex.Message);

                    // invalid credentials
                    ex = Assert.ThrowsAsync <AuthFailedException>(async() =>
                                                                  await CallGetVersionServiceCore(js, jc, new SrpCredentials("hacker", "password")));
                    Assert.AreEqual("Authentication failed", ex.Message);
                }
        }
コード例 #8
0
ファイル: DataService.cs プロジェクト: MarkKoz/BotHATTwaffle
        async public Task <string> RconCommand(string command, JsonServer server)
        {
            string      reply       = null;
            string      botIP       = new WebClient().DownloadString("http://icanhazip.com").Trim();
            IPHostEntry iPHostEntry = null;

            try
            {
                iPHostEntry = Dns.GetHostEntry(server.Address);
            }
            catch
            {
                return("HOST_NOT_FOUND");
            }

            var rcon = new RCON(IPAddress.Parse($"{iPHostEntry.AddressList[0]}"), 27015, server.Password, 1000);

            reply = await rcon.SendCommandAsync(command);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine($"RCON COMMAND: {server.Address}\nCommand: {command}\n");
            Console.ResetColor();

            //If you re-set the rcon_password all RCON connections are closed.
            //By not awaiting this, we are able to set the rcon password back to the same value closing the connection.
            //This will automatically timeout and dispose of the rcon connection when it tries to conncect again.
            Task fireAndForget = rcon.SendCommandAsync($"rcon_password {server.Password}");

            reply = reply.Replace($"{botIP}", "69.420.MLG.1337"); //Remove the Bot's public IP from the string.

            return(reply);
        }
コード例 #9
0
        public async Task JsonServerHandlesDeserializationErrors()
        {
            // fake transport and serializer
            var server           = new StubServer();
            var client           = new StubClient(server);
            var provider         = new StubMessageTypeProvider();
            var serverSerializer = new BrokenSerializer();
            var clientSerializer = new Serializer();
            var executor         = new StubExecutor();

            using (var js = new JsonServer(server, provider, serverSerializer, executor))
                using (var jc = new JsonClient(client, provider, clientSerializer))
                {
                    js.Start();

                    var tcs = new TaskCompletionSource <bool>();
                    js.UnhandledException += (s, e) => tcs.TrySetException(e.Exception);

                    // TODO: can we have something better than a timeout here?
                    await Assert_TimedOut(jc.ConnectAsync(), timeout : Task.Delay(200));

                    // the server should have got an unhandled exception
                    Assert.ThrowsAsync <NotImplementedException>(async() => await Assert_NotTimedOut(tcs.Task));
                }
        }
コード例 #10
0
 public void Start(IReadOnlyList <string> testInfo, JsonServer server)
 {
     if (!worker.IsBusy)
     {
         // RunWorkerAsync raises the DoWork event.
         worker.RunWorkerAsync((testInfo, server));
     }
 }
コード例 #11
0
        public void RunInServiceMode()
        {
            var server = new JsonServer {
                Service = new CompilerService()
            };

            server.Run();
        }
コード例 #12
0
 public SftpDownloader(IReadOnlyList <string> testInfo,
                       JsonServer server,
                       DataServices dataSvc) :
     base(testInfo, server, dataSvc)
 {
     Client =
         new SftpClient(testInfo[10], server.FTPUser, server.FTPPass);
 }
コード例 #13
0
        protected override JsonClient CreateClient(JsonServer server)
        {
            var client     = new StubClient(server.Server as StubServer);
            var serializer = new Serializer();
            var provider   = new StubMessageTypeProvider();

            return(new JsonClient(client, provider, serializer));
        }
コード例 #14
0
        protected virtual JsonClient CreateClient(JsonServer server)
        {
            // fake transport and serializer
            var client     = new StubClient((StubServer)server.Server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            return(new JsonClient(client, provider, serializer));
        }
コード例 #15
0
        public AdvancedConfig()
        {
            Browser = new JsonBrowser();

            Server = new JsonServer();

            Easy   = new JsonMode();
            Normal = new JsonMode();
            Hard   = new JsonMode();
        }
コード例 #16
0
 public Boolean IsServerOpen(JsonServer server)
 {
     foreach (UserData u in userData.ToList())
     {
         if (u.Server == server)
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #17
0
        protected Downloader(IReadOnlyList <string> testInfo, JsonServer server, DataServices dataSvc)
        {
            DataSvc = dataSvc;
            DateTime time  = Convert.ToDateTime(testInfo[1]);
            string   title = testInfo[2].Substring(0, testInfo[2].IndexOf(" "));

            DemoName   = $"{time:MM_dd_yyyy}_{title}";
            FtpPath    = server.FTPPath;
            LocalPath  = $"{DataSvc.DemoPath}\\{time:yyyy}\\{time:MM} - " + $"{time:MMMM}\\{DemoName}";
            WorkshopId = Regex.Match(testInfo[6], @"\d+$").Value;
        }
コード例 #18
0
        public FtpDownloader(IReadOnlyList <string> testInfo, JsonServer server, DataServices dataSvc) : base(testInfo, server, dataSvc)
        {
            gamemode = testInfo[7];
            Client   = new FtpClient(server.Address, server.FTPUser, server.FTPPass);

            if (server.FTPType == "ftps")
            {
                Client.EncryptionMode = FtpEncryptionMode.Explicit;
                Client.SslProtocols   = SslProtocols.Tls;

                Client.ValidateCertificate += (control, e) => { e.Accept = true; };
            }
        }
コード例 #19
0
        protected async Task CallDelayServiceAndAbortConnectionCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            js.Start();
            await jc.ConnectAsync(credentials);

            var call = jc.Call(new DelayRequest {
                Milliseconds = 1000
            });
            await Task.Delay(100);             // make sure that the call was actually sent

            await jc.Client.DisconnectAsync(); // should fire Disconnected event

            Assert.ThrowsAsync <ClientDisconnectedException>(async() =>
                                                             await Assert_NotTimedOut(call, "jc.Call(Delay 1000)", Task.Delay(2000)));
        }
コード例 #20
0
        protected virtual async Task CallDelayServiceCore(JsonServer js, JsonClient jc, ICredentials credentials = null)
        {
            js.Start();
            await jc.ConnectAsync(credentials);

            await Assert_NotTimedOut(jc.Call(new DelayRequest {
                Milliseconds = 10
            }), "jc.Call(Delay 10)");
            await Assert_TimedOut(jc.Call(new DelayRequest {
                Milliseconds = 200
            }), "jc.Call(Delay 200)", Task.Delay(10));

            // make sure that await completes before the server is disposed (affects NetMQ server)
            await Task.Delay(300);
        }
コード例 #21
0
        public async Task CallGetVersionService()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            using (var js = new JsonServer(server, provider, serializer, executor))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    await CallGetVersionServiceCore(js, jc);
                }
        }
コード例 #22
0
        public async Task JsonClientRejectsPendingMessagesWhenConnectionIsAborted()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            // json server and client
            using (var js = new JsonServer(server, provider, serializer, executor))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    await CallDelayServiceAndAbortConnectionCore(js, jc);
                }
        }
コード例 #23
0
        public async Task JsonServerCanExecuteGenericMessages()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new GenericServiceExecutor();
            var provider   = new GenericMessageTypeProvider();

            // json server and client
            using (var js = new JsonServer(server, provider, serializer, executor))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    await CallGenericMessagesCore(js, jc);
                }
        }
コード例 #24
0
        public async Task CallCalculateServiceUsingSrpAuthentication()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            // json server and client
            using (var js = new JsonServer(server, provider, serializer, executor, AuthProvider))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    await CallCalculateServiceCore(js, jc, Credentials);
                }
        }
コード例 #25
0
        public async Task JsonClientCanDisconnectAndReconnect()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            // json server and client
            using (var js = new JsonServer(server, provider, serializer, executor))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    await CallDisconnectAndReconnectCore(js, jc);
                }
        }
コード例 #26
0
        public async Task ReleasePublicTestCommandAsync([Remainder] string command = null)
        {
            if (Context.IsPrivate)
            {
                await ReplyAsync("***This command can not be used in a DM***");

                return;
            }

            if ((Context.User as SocketGuildUser).Roles.Contains(_dataServices.ActiveRole))
            {
                JsonServer server = null;

                if (!_levelTesting.canReserve)
                {
                    await ReplyAsync($"```Servers cannot be reserved at this time." +
                                     $"\nServer reservation is blocked 1 hour before a scheduled test, and resumes once the calendar event has passed.```");

                    return;
                }
                Boolean hasServer = false;
                foreach (UserData u in _levelTesting.userData)
                {
                    if (u.User == Context.Message.Author)
                    {
                        server    = u.Server;
                        hasServer = true;
                    }
                }

                if (hasServer)
                {
                    await ReplyAsync("```Releasing Server reservation.```");

                    await _levelTesting.ClearServerReservations(server.Name);
                }
                else
                {
                    await ReplyAsync("```I could not locate a server reservation for your account.```");
                }
            }
            else
            {
                await _dataServices.ChannelLog($"{Context.User} is trying to use public playtest commands without permission.");
                await ReplyAsync($"```You cannot use this command with your current permission level! You need {_dataServices.ActiveRole.Name} role.```");
            }
        }
コード例 #27
0
        public async Task JsonServerHasEvents()
        {
            var server     = new StubServer();
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();
            var js         = new JsonServer(server, provider, serializer, executor);

            var connectCounter = 0;

            void connectEventHandler(object sender, MessageEventArgs e) => connectCounter++;

            js.ClientConnected    += connectEventHandler;
            js.ClientDisconnected += connectEventHandler;

            var serviceCounter = 0;

            void serviceEventHandler(object sender, EventArgs e) => serviceCounter++;

            js.InitializeRequestContext += serviceEventHandler;
            js.BeforeExecuteService     += serviceEventHandler;
            js.AfterExecuteService      += serviceEventHandler;

            var client = new StubClient(server);
            var jc     = new JsonClient(client, provider, serializer);

            Assert.AreEqual(1, connectCounter);
            Assert.AreEqual(0, serviceCounter);

            // connect makes one service call and fires three events:
            // InitializeRequestContext, BeforeExecuteService, AfterExecuteService
            await jc.ConnectAsync();

            Assert.AreEqual(3, serviceCounter);

            js.Dispose();
            Assert.AreEqual(2, connectCounter);

            // unsubscribe
            js.ClientDisconnected       -= connectEventHandler;
            js.ClientConnected          -= connectEventHandler;
            js.AfterExecuteService      -= serviceEventHandler;
            js.BeforeExecuteService     -= serviceEventHandler;
            js.InitializeRequestContext -= serviceEventHandler;
        }
コード例 #28
0
        public void SrpAuthenticationFailsOnIncompatibleAuthProvider()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            // json server without authentication vs SRP client
            using (var js = new JsonServer(server, provider, serializer, executor))
                using (var jc = new JsonClient(client, provider, serializer))
                {
                    var ex = Assert.ThrowsAsync <AuthFailedException>(async() =>
                                                                      await CallGetVersionServiceCore(js, jc, Credentials));
                    Assert.AreEqual("Server doesn't support SRP authentication protocol", ex.Message);
                }
        }
コード例 #29
0
        public async Task CallServiceBeforeConnectingShouldFail()
        {
            // fake transport and serializer
            var server     = new StubServer();
            var client     = new StubClient(server);
            var serializer = new Serializer();
            var executor   = new StubExecutor();
            var provider   = new StubMessageTypeProvider();

            var js = new JsonServer(server, provider, serializer, executor);
            var jc = new JsonClient(client, provider, serializer);

            js.Start();

            Assert.ThrowsAsync <AuthRequiredException>(async() =>
                                                       await Assert_NotTimedOut(jc.Call(new GetVersion()), "jc.Call(GetVersion) before Connect"));

            await Assert_NotTimedOut(jc.ConnectAsync(), "jc.ConnectAsync()");
            await Assert_NotTimedOut(jc.Call(new GetVersion()), "jc.Call(GetVersion) after connect");
        }
コード例 #30
0
        public void JsonServerHandlesMessageTypeProvidersErrors()
        {
            // fake transport and serializer
            var server           = new StubServer();
            var client           = new StubClient(server);
            var provider         = new BrokenMessageTypeProvider();
            var serverSerializer = new Serializer();
            var clientSerializer = new Serializer();
            var executor         = new StubExecutor();

            using (var js = new JsonServer(server, provider, serverSerializer, executor))
                using (var jc = new JsonClient(client, provider, clientSerializer))
                {
                    js.Start();

                    var ex = Assert.ThrowsAsync <InvalidRequestException>(() => Assert_NotTimedOut(jc.ConnectAsync(), timeout: Task.Delay(200)));

                    // note: JsonServicesException.MessageId is lost
                    // when an exception is translated to Error and back again
                    Assert.IsNull(ex.MessageId);
                }
        }