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(); }
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(); }
/// <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)); }
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); } } }
/// <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(); } }
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(); }
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); }
/// <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); }