Ejemplo n.º 1
0
        public void OnMapChange(TrackingServerInfo args)
        {
            //  Tuple<string,string,string> entry = new Tuple<string, string, string>()
            PlayEntry entry = new PlayEntry(args.playerCount.ToString(), args.serverIP, System.DateTime.Now.ToShortDateString() + " : " + System.DateTime.Now.ToShortTimeString());

            AddEntry(args.currentMap, entry);
            savePersistentData();
            UpdateList();
        }
Ejemplo n.º 2
0
 public void ServerUpdated(object sender, TrackingServerInfo args)
 {
     if (MapChangeEventListiners.Count > 0)
     {
         foreach (ServerMapChangeListiner Listiner in MapChangeEventListiners)
         {
             Listiner.OnMapChange(args);
         }
     }
 }
        // queries a server and returns a <string, int> Tuple (filename, playercount)
        public TrackingServerInfo ServerQuery(TrackingServerInfo server)
        {
            if (IsEmulating) //For testing purposes, we can assign and set an emulated TrackingServerInfo response
            {
                return(EmulatedTrackingServerInfo);
            }
            else
            {
                TrackingServerInfo updatedServer = null;
                // request server infos
                IPEndPoint localEndpoint = new IPEndPoint(IPAddress.Any, 0);

                using (var client = new UdpClient(new IPEndPoint(IPAddress.Any, 0)))
                {
                    client.Client.ReceiveTimeout = 5000;
                    client.Client.SendTimeout    = 5000;

                    client.Connect(new IPEndPoint(System.Net.IPAddress.Parse(server.serverIP), server.port));

                    var request = new List <byte>();
                    request.AddRange(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0x54 });
                    request.AddRange(Encoding.ASCII.GetBytes("Source Engine Query\0"));
                    var requestArr = request.ToArray();
                    client.Send(requestArr, requestArr.Length);

                    try
                    {
                        var data = client.Receive(ref localEndpoint).Skip(6).ToArray();

                        updatedServer = new TrackingServerInfo(server.serverIP, server.port, server.tag);
                        string[] TrackingServerInfos = Encoding.ASCII.GetString(data).Split(new char[] { '\0' }, 5);
                        // getting and sanitizing filename
                        updatedServer.currentMap = TrackingServerInfos[1].Split('.')[0].Replace("workshop/", "");
                        // getting playerount
                        updatedServer.playerCount = (int)Encoding.ASCII.GetBytes(TrackingServerInfos[4]).Skip(2).ToArray()[0];
                        // getting server capacity
                        updatedServer.capacity = (int)Encoding.ASCII.GetBytes(TrackingServerInfos[4]).Skip(2).ToArray()[1];

                        client.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(string.Format("Error from: {0}: {1}", server.tag, ex.Message));
                        client.Close();
                    }
                }

                return(updatedServer);
            }
        }
        public void SyncTrackingServerInfo(object sender, EventArgs e)
        {
            for (int x = 0; x < TrackedServers.Servers.Count; x++)
            {
                TrackingServerInfo currentserverstate = ServerQuery(TrackedServers.Servers[x]);

                if (currentserverstate != null)
                {
                    if (!(TrackedServers.Servers[x].currentMap.Equals(currentserverstate.currentMap)) && currentserverstate.playerCount > 8)
                    {
                        ServerMapChanged(this, currentserverstate);
                        TrackedServers.Servers[x].update(currentserverstate);
                    }
                }
            }
        }
        public override void loadPersistentData()
        {
            try
            {
                Tuple <string, string, int>[] servers = JsonConvert.DeserializeObject <Tuple <string, string, int>[]>(System.IO.File.ReadAllText(ModuleSavedDataFilePath()));

                foreach (Tuple <string, string, int> servconf in servers)
                {
                    IPEndPoint         ep = new IPEndPoint(System.Net.IPAddress.Parse(servconf.Item2), servconf.Item3);
                    TrackingServerInfo TrackingServerInfo = new TrackingServerInfo(servconf.Item2, servconf.Item3, servconf.Item1);
                    TrackedServers.Add(TrackingServerInfo);
                }
            }
            catch
            {
                Console.WriteLine("There was an error loading the TrackingServerList");
            }
        }
Ejemplo n.º 6
0
        public void OnMapChange(TrackingServerInfo args)
        {
            Console.WriteLine("Going to possibly remove {0} Map...", args.currentMap);

            Map map = mapList.GetMapByFilename(args.currentMap);

            if (map != null && args.playerCount > 8)
            {
                User Submitter = new User(map.Submitter, null);

                Console.WriteLine("Found map, sending message to {0}", Submitter);
                string ReasonForDeletion = string.Format("Map {0} is being tested on the {1} server and has been DELETED.", map.Filename, args.tag);
                userhandler.SendPrivateMessageProcessEvent(new MessageEventArgs(null)
                {
                    Destination = Submitter, ReplyMessage = ReasonForDeletion
                });
                mapList.RemoveMap(map, ReasonForDeletion);
                Console.WriteLine("Map {0} is being tested on the {1} server and has been DELETED.", map.Filename, args.tag);
                savePersistentData();
            }
            Console.Write("...Not Found");
            return;
        }
Ejemplo n.º 7
0
            protected override string exec(MessageEventArgs Msg, string param)
            {
                string[] parameters = param.Split(new char[] { ' ' });

                if (parameters.Length > 2)
                {
                    try
                    {
                        IPEndPoint         ep     = new IPEndPoint(System.Net.IPAddress.Parse(parameters[1]), int.Parse(parameters[2]));
                        TrackingServerInfo Server = new TrackingServerInfo(parameters[1], int.Parse(parameters[2]), parameters[0]);
                        module.TrackedServers.Add(Server);

                        return(string.Format("Server {0} has been successfully added at: {1}", Server.tag, Server.serverIP));
                    }
                    catch
                    {
                        return("Your data types were invalid!");
                    }
                }
                else
                {
                    return("Your Server was not added, remember the command is: !serveradd servername serverIP serverPort");
                }
            }
Ejemplo n.º 8
0
 public void Remove(TrackingServerInfo server)
 {
     TrackingServerListObject.Remove(server);
     ServerTrackingModule.savePersistentData();
 }
Ejemplo n.º 9
0
 void ModuleHandler.ServerUpdated(object sender, TrackingServerInfo args)
 {
 }
Ejemplo n.º 10
0
 public void EmulateServerQuery(TrackingServerInfo Response)
 {
     EmulatedTrackingServerInfo = Response;
     IsEmulating = true;
 }
Ejemplo n.º 11
0
        private void ServerTrackingModule_ServerMapChanged(object sender, TrackingServerInfo e)
        {
            string TableLabel = e.tag + " History";

            TableDataValue HeaderName = new TableDataValue();

            HeaderName.VisibleValue = "Map Name";

            TableDataValue HeaderNamePlayerCount = new TableDataValue();

            HeaderNamePlayerCount.VisibleValue = "PlayerCount";

            TableDataValue HeaderTime = new TableDataValue();

            HeaderTime.VisibleValue = "Time (UTC)";

            SetTableHeader tableheaderSetter = new SetTableHeader();

            tableheaderSetter.TableIdentifier = TableLabel;
            tableheaderSetter.Header          = new TableDataValue[] { HeaderName, HeaderNamePlayerCount, HeaderTime };
            WebServer.HandleCommand(tableheaderSetter);

            TableDataValue MapName = new TableDataValue();

            MapName.VisibleValue = e.currentMap;

            TableDataValue PlayerCount = new TableDataValue();

            PlayerCount.VisibleValue = e.playerCount.ToString();

            TableDataValue Time = new TableDataValue();

            Time.VisibleValue = DateTime.UtcNow.ToLongDateString() + " " + DateTime.UtcNow.ToLongTimeString();

            AddWebsiteEntry AddSiteEntry = new AddWebsiteEntry();

            AddSiteEntry.Data       = new TableDataValue[] { MapName, PlayerCount, Time };
            AddSiteEntry.limit      = 10;
            AddSiteEntry.Identifier = TableLabel;
            WebServer.HandleCommand(AddSiteEntry);

            if (e.playerCount > 8)
            {
                userhandler.BroadcastMessageProcessEvent(e.ToString());

                TableDataValue HeaderServer = new TableDataValue();
                HeaderServer.VisibleValue = "Server";

                TableDataValue ServerLabel = new TableDataValue();
                ServerLabel.VisibleValue = e.tag;
                ServerLabel.Link         = "steam://connect/" + e.serverIP + ":" + e.port;

                string RecentlyTestedTableLabel = "Recently Tested";

                SetTableHeader tableheader = new SetTableHeader();
                tableheader.TableIdentifier = RecentlyTestedTableLabel;
                tableheader.Header          = new TableDataValue[] { HeaderName, HeaderNamePlayerCount, HeaderTime, HeaderServer };

                WebServer.HandleCommand(tableheader);

                AddWebsiteEntry WebSiteEntryToAdd = new AddWebsiteEntry();
                WebSiteEntryToAdd.Data       = new TableDataValue[] { MapName, PlayerCount, Time, ServerLabel };
                WebSiteEntryToAdd.limit      = 10;
                WebSiteEntryToAdd.Identifier = RecentlyTestedTableLabel;

                WebServer.HandleCommand(WebSiteEntryToAdd);
            }
        }
Ejemplo n.º 12
0
 public void update(TrackingServerInfo updated)
 {
     this.playerCount = updated.playerCount;
     this.capacity    = updated.capacity;
     this.currentMap  = updated.currentMap;
 }