コード例 #1
0
        public void NPServer07_ClientMissing()
        {
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            NPClient Client = new NPClient(PipeName, VerifyMessage);
            bool     MissingMethodException = false;

            try
            {
                Client.Get("Fedfe");
            }
            catch (TimeoutException)
            {
                MissingMethodException = true;
            }
            Assert.IsTrue(MissingMethodException);


            NPServer Server = new NPServer(PipeName, VerifyMessage);

            Server.UpdateCommand("Fedfe", args => { return("Arabe"); });
            Server.Start();
            Assert.AreEqual(Server.IsRunning, true);
            Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));

            Assert.AreEqual(Client.Get("Fedfe"), "Arabe");

            Server.Stop().Wait();
            Server.Dispose();
            Assert.AreEqual(Server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
        }
コード例 #2
0
        public void NPServer09_GetCustomContract()
        {
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            NPServer       Server     = new NPServer(PipeName, VerifyMessage);
            CustomContract FromServer = new CustomContract()
            {
                Key = "This is Custom", Value = "Custom Value"
            };

            Server.UpdateCommand("Custom", args => { return(FromServer); });
            Server.Start();

            Assert.AreEqual(Server.IsRunning, true);
            Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));

            NPClient       Client = new NPClient(Environment.MachineName, PipeName, VerifyMessage);
            CustomContract result = Client.Get <CustomContract>("Custom");

            Assert.AreEqual(result, FromServer);

            Server.Stop().Wait();
            Server.Dispose();
            Assert.AreEqual(Server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
        }
コード例 #3
0
        public void NPServer05_VerifyMessageIncurrect()
        {
            Trace.WriteLine("NPServer05_VerifyMessageIncurrect " + Counter++.ToString());
            string PipeName          = "Test";
            string VerifyMessage     = "TestMessage";
            string VerifyFailMessage = "ArabeMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            using (NPServer Server = new NPServer(PipeName, VerifyMessage))
            {
                Server.Start();
                Assert.AreEqual(Server.IsRunning, true);
                NPClient Client = new NPClient(PipeName, VerifyFailMessage);
                bool     UnauthorizedAccessException = false;
                try
                {
                    Client.Get("Fedfe");
                }
                catch (UnauthorizedAccessException)
                {
                    UnauthorizedAccessException = true;
                }
                Assert.IsTrue(UnauthorizedAccessException);
                Server.Stop().Wait();
            }
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            Trace.WriteLine("END NPServer05_VerifyMessageIncurrect " + Counter++.ToString());
        }
コード例 #4
0
        public void NPServer01_StartStop()
        {
            Trace.WriteLine("NPServer01_StartStop " + Counter++.ToString());
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            //NO Test Pipe
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            NPServer server = new NPServer(PipeName, VerifyMessage);

            Assert.AreEqual(server.PipeName, PipeName);
            Assert.AreEqual(server.IsRunning, false);

            //NO Test Pipe
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            server.Start();
            Assert.AreEqual(server.IsRunning, true);
            Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));

            server.Stop().Wait();
            Assert.AreEqual(server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            Trace.WriteLine("END NPServer01_StartStop " + Counter++.ToString());
        }
コード例 #5
0
        public void NPServer06_RemoveCommand()
        {
            Trace.WriteLine("NPServer06_RemoveCommand " + Counter++.ToString());
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            using (NPServer Server = new NPServer(PipeName, VerifyMessage))
            {
                Server.UpdateCommand("Arabe", args => { return("Fedfe"); });
                Server.UpdateCommand("ONE", args => { return("1"); });
                Server.Start();
                Assert.AreEqual(Server.IsRunning, true);

                NPClient Client = new NPClient(PipeName, VerifyMessage);
                Assert.AreEqual(Client.Get("Arabe"), "Fedfe");
                Assert.AreEqual(Client.Get("ONE"), "1");

                Server.RemoveCommand("ONE");

                bool MissingMethodException = false;
                try
                {
                    Client.Get("ONE");
                }
                catch (MissingMethodException)
                {
                    MissingMethodException = true;
                }
                Assert.IsTrue(MissingMethodException);
            }
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            Trace.WriteLine("END NPServer06_RemoveCommand " + Counter++.ToString());
        }
コード例 #6
0
 public PlayerPreAuthEvent(NPServer server, string userid, string ip, string country, byte flags)
 {
     this.Server    = server;
     this.UserID    = userid;
     this.IPAddress = ip;
     this.Country   = country;
     this.Flags     = flags;
 }
コード例 #7
0
        public void InvokeWaitingForPlayers(WaitingForPlayersEvent ev, NPServer server)
        {
            WaitingForPlayers.InvokeSafely(ev);

            if (!AddonInstances.TryGetValue(server, out IAddonDedicated <IConfig, IConfig> addon))
            {
                return;
            }

            addon.InvokeWaitingForPlayers(ev);
        }
コード例 #8
0
        public void InvokePlayerPreAuth(PlayerPreAuthEvent ev, NPServer server)
        {
            PlayerPreAuth.InvokeSafely(ev);

            if (!AddonInstances.TryGetValue(server, out IAddonDedicated <IConfig, IConfig> addon))
            {
                return;
            }

            addon.InvokePlayerPreAuth(ev);
        }
コード例 #9
0
        public void InvokeRoundEnded(RoundEndedEvent ev, NPServer server)
        {
            RoundEnded.InvokeSafely(ev);

            if (!AddonInstances.TryGetValue(server, out IAddonDedicated <IConfig, IConfig> addon))
            {
                return;
            }

            addon.InvokeRoundEnded(ev);
        }
コード例 #10
0
        public void NPServer03_Command()
        {
            Trace.WriteLine("NPServer03_Command " + Counter++.ToString());
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            using (NPServer Server = new NPServer(PipeName, VerifyMessage))
            {
                Server.UpdateCommand("3Arabe", args => { return("Fedfe"); });
                Server.UpdateCommand("3ONE", args => { return("1"); });
                Server.UpdateCommand("3Thai", args => { return("ไทย"); });
                Server.UpdateCommand("3ไทย", args => { return("Thai ไทย"); });
                Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
                Server.Start();

                Assert.AreEqual(Server.IsRunning, true);
                Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));

                NPClient Client = new NPClient(PipeName, VerifyMessage);
                Assert.AreEqual(Client.Get("3Arabe"), "Fedfe");

                Assert.AreEqual(Server.IsRunning, true);
                Assert.AreEqual(Client.Get("3ONE"), "1");

                Assert.AreEqual(Server.IsRunning, true);


                Assert.AreEqual(Client.Get("3Thai"), "ไทย");
                Assert.AreEqual(Server.IsRunning, true);
                Assert.AreEqual(Client.Get("3ไทย"), "Thai ไทย");
                Assert.AreEqual(Server.IsRunning, true);

                //Update command
                Server.UpdateCommand("3ONE", (o) => { return("New ONE"); });
                Assert.AreEqual(Client.Get("3ONE"), "New ONE");
                Assert.AreEqual(Server.IsRunning, true);

                Server.Stop().Wait();
                Assert.AreEqual(Server.IsRunning, false);
                Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            }
            Trace.WriteLine("END NPServer03_Command " + Counter++.ToString());
        }
コード例 #11
0
        public void NPServer10_GetWithArgs()
        {
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            NPServer Server = new NPServer(PipeName, VerifyMessage);

            Server.UpdateCommand("Add", args => {
                int First  = NPConvertor.ToInt(args[0]);
                int Second = NPConvertor.ToInt(args[1]);
                return(First + Second);
            });
            Server.UpdateCommand("Custom", args => {
                string KEY            = NPConvertor.ToString(args[0]);
                string VALUE          = NPConvertor.ToString(args[1]);
                CustomContract custom = NPConvertor.To <CustomContract>(args[2]);
                return(custom.Key == KEY && custom.Value == VALUE);
            });
            Server.Start();

            NPClient Client = new NPClient(Environment.MachineName, PipeName, VerifyMessage);

            Assert.AreEqual(Client.Get <int>("Add", 1, 2), 3);
            Assert.IsFalse(Client.Get <bool>("Custom", "YES", "SIR", new CustomContract()
            {
                Key = "YES", Value = "ARABE"
            }));
            Assert.IsTrue(Client.Get <bool>("Custom", "YES", "SIR", new CustomContract()
            {
                Key = "YES", Value = "SIR"
            }));

            Server.Stop().Wait();
            Server.Dispose();
            Assert.AreEqual(Server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
        }
コード例 #12
0
        public void NPServer02_DuplicateStart()
        {
            Trace.WriteLine("NPServer02_DuplicateStart " + Counter++.ToString());
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            //NO Test Pipe
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            using (NPServer Server1 = new NPServer(PipeName, VerifyMessage))
            {
                Assert.AreEqual(Server1.PipeName, PipeName);


                //NO Test Pipe
                Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
                Assert.AreEqual(Server1.IsRunning, false);

                Server1.Start();
                Assert.AreEqual(Server1.IsRunning, true);
                Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));

                using (NPServer Server2 = new NPServer(PipeName, VerifyMessage))
                {
                    Assert.AreEqual(Server2.PipeName, PipeName);
                    Assert.AreEqual(Server2.IsRunning, false);

                    Server2.Start();
                    Assert.AreEqual(Server2.IsRunning, false);

                    Server2.Stop().Wait();
                }
                Server1.Stop().Wait();
                Assert.AreEqual(Server1.IsRunning, false);
            }
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
            Trace.WriteLine("END NPServer02_DuplicateStart " + Counter++.ToString());
        }
コード例 #13
0
        public void AddAddon(NPServer targetServer)
        {
            var addon    = (IAddonDedicated <IConfig, IConfig>)Activator.CreateInstance(DefaultAddon.GetType());
            var property = addon.GetType().GetProperty("Server", BindingFlags.Public | BindingFlags.Instance);
            var field    = property.GetBackingField();

            field.SetValue(addon, targetServer);

            property = addon.GetType().GetProperty("ServerPath", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, targetServer.ServerDirectory);

            property = addon.GetType().GetProperty("Handler", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, this);

            property = addon.GetType().GetProperty("DefaultPath", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, DefaultAddon.DefaultPath);

            property = addon.GetType().GetProperty("AddonPath", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, DefaultAddon.AddonPath);

            property = addon.GetType().GetProperty("Manager", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, DefaultAddon.Manager);

            property = addon.GetType().GetProperty("Logger", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, DefaultAddon.Logger);

            property = addon.GetType().GetProperty("Commands", BindingFlags.Public | BindingFlags.Instance);
            field    = property.GetBackingField();
            field.SetValue(addon, DefaultAddon.Commands);

            AddonInstances.Add(targetServer, addon);
        }
コード例 #14
0
        public void NPServer08_Networking()
        {
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            NPServer Server = new NPServer(PipeName, VerifyMessage);

            Server.UpdateCommand("Fedfe", args => { return("Arabe"); });
            Server.Start();
            Assert.AreEqual(Server.IsRunning, true);
            Assert.IsTrue(NPServer.IsNamedPipeOpen(PipeName));


            NPClient Client = new NPClient(Environment.MachineName, PipeName, VerifyMessage);

            Assert.AreEqual(Client.Get("Fedfe"), "Arabe");

            Server.Stop().Wait();
            Server.Dispose();
            Assert.AreEqual(Server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
        }
コード例 #15
0
        /// <inheritdoc/>
        public void OnConnectionRequest(ConnectionRequest request)
        {
            if (!request.Data.TryGetString(out string key))
            {
                return;
            }

            if (key != config.HostConnectionKey && !string.IsNullOrEmpty(config.HostConnectionKey))
            {
                return;
            }

            if (!request.Data.TryGetString(out string version))
            {
                return;
            }

            if (Version.TryParse(version, out Version receivedVersion))
            {
                if (receivedVersion.CompareTo(NPVersion.Version) < 0)
                {
                    NetDataWriter writer = new NetDataWriter();
                    writer.Put((byte)RejectType.OutdatedVersion);
                    writer.Put(NPVersion.Version.ToString(3));
                    request.Reject(writer);
                    return;
                }
            }

            if (!request.Data.TryGetUShort(out ushort port))
            {
                return;
            }

            if (!request.Data.TryGetInt(out int maxplayers))
            {
                return;
            }

            if (!request.Data.TryGetStringArray(out string[] addons))
            {
                return;
            }

            if (!request.Data.TryGetBytesWithLength(out byte[] token))
            {
                return;
            }

            if (Servers.Values.FirstOrDefault(p => p.ServerAddress == request.RemoteEndPoint.Address.ToString() && p.ServerPort == port) != null)
            {
                Logger.Error($"Server with ip \"{request.RemoteEndPoint.Address.ToString()}\" and port \"{port}\" is already connected. (Multiple ips on machine)");
                request.Reject();
                return;
            }

            var server = new NPServer(PacketProcessor, request.RemoteEndPoint.Address.ToString(), port, maxplayers);

            var Addons = addons.ToList();

            Addons.AddRange(config.DefaultAddons);

            if (!server.InitServer(request, Encoding.UTF8.GetString(token), Addons))
            {
                return;
            }

            try
            {
                server.LoadInstalledAddons();
            }
            catch (Exception ex)
            {
                Logger.Error($"Failed loading addons for server \"{server.FullAddress}\".\n{ex}");
            }


            Servers.Add(server.Peer, server);
            Logger.Info($"New server connected \"{server.FullAddress}\".");
        }
コード例 #16
0
        public void NPServer11_NodeHub()
        {
            string PipeName      = "Test";
            string VerifyMessage = "TestMessage";

            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));

            NPServer Server = new NPServer(PipeName, VerifyMessage);

            string ServerName   = "Arabe";
            int    ServerNumber = 1;

            Server.Sync("Name", ServerName);
            Server.Sync("Number", ServerNumber);
            Server.Start();

            NPClient Client       = new NPClient(PipeName, VerifyMessage);
            string   ClientName   = default(string);
            int      ClientNumber = default(int);

            Client.Subscribe <string>("Name", v => {
                ClientName = v;
            });
            Client.Subscribe <int>("Number", v => ClientNumber = v);

            Task.Delay(100).Wait();

            //Test First Subscribe Data
            Assert.AreEqual(ClientName, ServerName);            //Arabe = Arabe
            Assert.AreEqual(ClientNumber, ServerNumber);        //1 = 1

            string ServerName2   = "Fedfe";
            int    ServerNumber2 = 2;

            Server.Sync("Name", ServerName2);
            Server.Sync("Number", ServerNumber2);

            Task.Delay(100).Wait();

            //Test First Change Data
            Assert.AreEqual(ClientName, ServerName2);           //Fedfe = Fedfe
            Assert.AreEqual(ClientNumber, ServerNumber2);       //2 = 2

            Client.Unsubscribe("Number");
            Task.Delay(100).Wait();
            string ServerName3 = "Yes Sir";

            Server.Sync("Name", ServerName3);
            Task.Delay(100).Wait();
            Server.Sync("Number", 3);

            Assert.AreEqual(ClientName, ServerName3);           //Yes Sir = Yes Sir
            Assert.AreEqual(ClientNumber, ServerNumber2);       //2 = 2

            Client.Unsubscribe("Name");

            Server.Sync("Name", "NotThings");

            Assert.AreEqual(ClientName, ServerName3);           //Yes Sir = Yes Sir

            Server.Stop().Wait();
            Server.Dispose();
            Assert.AreEqual(Server.IsRunning, false);
            Assert.IsFalse(NPServer.IsNamedPipeOpen(PipeName));
        }
コード例 #17
0
 public WaitingForPlayersEvent(NPServer server)
 {
     Server = server;
 }
コード例 #18
0
 public RoundEndedEvent(NPServer server)
 {
     Server = server;
 }