Ejemplo n.º 1
0
        static void AsyncPing()
        {
            Console.WriteLine("\r\nAsyncPing");

            var factory = new ServerStatusFactory();

            factory.ServerChanged += (object sender, EventBase[] e) => {
                var srv = (ServerStatus)sender;
                Console.WriteLine("Got new Events for server: " + srv.Label);
                foreach (var evt in e)
                {
                    Console.WriteLine(evt);
                }
            };

            factory.Make(TestServer, 25565, false, "One");

            factory.StartAutoUpdate();

            var cntDwn = 30;

            while (cntDwn-- >= 0)
            {
                Console.WriteLine("Waiting " + (cntDwn * 10) + " seconds for something to happen ...");
                Thread.Sleep(10000);
            }

            factory.Dispose();
        }
Ejemplo n.º 2
0
        static void MultiPing()
        {
            Console.WriteLine("\r\nMultiPing");

            var factory = new ServerStatusFactory();

            // create first instance
            factory.Make(TestServer, 25565, false, "One");
            // create second instance (force new)
            factory.Make(TestServer, 25565, true, "Two");

            // create two wrong instances with the same base
            var a = factory.Make(TestServer, 25566, false, "Three");
            var b = factory.Make(TestServer, 25566, false, "Four");

            Console.WriteLine("Compare: " + a.Updater.Equals(b.Updater));

            factory.PingAll(5);

            foreach (var srv in factory.Entries)
            {
                var events = srv.Update();
                foreach (var evt in events)
                {
                    Console.WriteLine($"Server {srv.Label} Event:\r\n{evt}");
                }
            }

            factory.Dispose();
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Remove a server with given label
        /// </summary>
        /// <param name="l"></param>
        /// <returns></returns>
        public bool RemoveServer(string l)
        {
            var stat = GetServer(l);

            if (stat == null)
            {
                return(false);
            }
            Servers.Remove(stat);
            return(ServerStatusFactory.Get().Destroy(stat));
        }
Ejemplo n.º 4
0
        internal static void Register <TPacket>(PacketDirection packetDirection, ConnectionState state, int packetId, Func <TPacket> createFunc) where TPacket : Packet
        {
            if (packetDirection == PacketDirection.ServerBound)
            {
                switch (state)
                {
                case ConnectionState.Handshake:
                    HandshakeFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Status:
                    StatusFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Login:
                    LoginFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Play:
                    PlayFactory.Register(packetId, createFunc);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(state), state, null);
                }
            }
            else
            {
                switch (state)
                {
                case ConnectionState.Handshake:
                    ServerHandshakeFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Status:
                    ServerStatusFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Login:
                    ServerLoginFactory.Register(packetId, createFunc);
                    break;

                case ConnectionState.Play:
                    ServerPlayFactory.Register(packetId, createFunc);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(state), state, null);
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        ///     Setup the bot command, load the settings and start
        /// </summary>
        public static void Start()
        {
            Program.WriteLine("MineCraftServerWatchBotV2 for Telegram made by @hexxon");
            Program.WriteLine("starting...");

            // default config
            Conf = new Config();

            // Add Bot commands
            Commands.Add(new CmdAdd());
            Commands.Add(new CmdList());
            Commands.Add(new CmdNotify());
            Commands.Add(new CmdPing());
            Commands.Add(new CmdPlayer());
            Commands.Add(new CmdRemove());
            Commands.Add(new CmdStart());
            Commands.Add(new CmdStats());
            Commands.Add(new CmdSven());

            // Load users, groups & settings
            Load();

            // Start the bot async
            _ = RunBotAsync();

            // main ping loop
            var sw      = new Stopwatch();
            var avgWait = 60000;

            while (true)
            {
                sw.Reset();
                sw.Start();
                ServerStatusFactory.Get().PingAll();
                Parallel.ForEach(_tgGroups, tgg => tgg.UpdateAll());
                sw.Stop();

                // calculate average wait time
                var waitme = 60000 - Convert.ToInt32(sw.ElapsedMilliseconds);
                avgWait = Math.Max(1000, (avgWait + waitme) / 2);
                Program.WriteLine($"Sleeping {avgWait} MS...");
                Task.Delay(avgWait).Wait();

                // save data
                Save();
            }
        }
Ejemplo n.º 6
0
        static void SinglePing()
        {
            Console.WriteLine("\r\nSinglePing");

            var factory = new ServerStatusFactory();

            var inst = factory.Make(TestServer);

            var res = inst.Updater.Ping();

            Console.WriteLine("Result: " + res);

            if (res.HadSuccess && res.FavIcon != null)
            {
                res.FavIcon.Save("favico.png");
                Console.WriteLine("Favicon saved!");
            }

            factory.Dispose();
        }
Ejemplo n.º 7
0
        public static Packet GetPacket(PacketDirection packetDirection, ConnectionState state, int packetId)
        {
            bool   success;
            Packet outPacket;

            if (packetDirection == PacketDirection.ServerBound)
            {
                switch (state)
                {
                case ConnectionState.Handshake:
                    success = HandshakeFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Status:
                    success = StatusFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Login:
                    success = LoginFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Play:
                    success = PlayFactory.TryGetPacket(packetId, out outPacket);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(state), state, null);
                }
            }
            else
            {
                switch (state)
                {
                case ConnectionState.Handshake:
                    success = ServerHandshakeFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Status:
                    success = ServerStatusFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Login:
                    success = ServerLoginFactory.TryGetPacket(packetId, out outPacket);
                    break;

                case ConnectionState.Play:
                    success = ServerPlayFactory.TryGetPacket(packetId, out outPacket);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(state), state, null);
                }
            }

            if (!success)
            {
                return(null);
            }
            outPacket.PacketId = packetId;
            return(outPacket);
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Add a server with given label, address and port
        /// </summary>
        /// <param name="l"></param>
        /// <param name="adr"></param>
        /// <param name="p"></param>
        public void AddServer(string l, string adr, int p)
        {
            var news = ServerStatusFactory.Get().Make(l, adr, p);

            Servers.Add(news);
        }