Example #1
0
        /// <summary>
        /// Creates a new instance of the <see cref="GameStat.Collections.ServerCollection"/> class and queries a master server.
        /// </summary>
        /// <param name="type">One of the <see cref="GameStat.MasterType"/> values.</param>
        /// <param name="filter">One or more of the <see cref="GameStat.MasterFilter"/> values.</param>
        /// <param name="host">The hostname/ip to query.</param>
        /// <param name="port">The master server's query port.</param>
        /// <returns>A new <see cref="GameStat.Collections.ServerCollection"/> class initialized with server information, or <c>null</c> if the master server didn't return any.</returns>
        /// <exception cref="System.Net.Sockets.SocketException">An error occurred when attempting to access the master server.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">The given <paramref name="type"/> is not recognized by GameStat.</exception>
        /// <exception cref="System.ArgumentException">An invalid argument was given.</exception>
        /// <exception cref="System.NotImplementedException">Support for the given <paramref name="type"/> is not implemented yet.</exception>
        /// <exception cref="GameStat.CorruptPacketException">A currupt or unknown packet was recieved from the master server.</exception>
        /// <remarks>
        ///    If <paramref name="host"/> is set to null, GameStat will try to guess it.  If <paramref name="host"/> can not be guessed, an <see cref="System.ArgumentException"/> will be thrown.
        ///    If <paramref name="port"/> is set to 0, GameStat will try to guess it.  If <paramref name="port"/> can not be guessed, an <see cref="System.ArgumentException"/> will be thrown.
        /// </remarks>
        /// <example>
        /// This example queries the Counter-Strike master server and writes the resulting information to the console.
        /// <code lang="C#">
        ///
        /// try {
        ///    ServerCollection servers=ServerInfo.QueryMaster(MasterType.Counter-Strike,
        ///       MasterFilter.NotFull|MasterFilter.NotEmpty|MasterFilter.NoPassword, null, 0);
        ///
        ///    if(servers!=null) {
        ///       foreach(Server s in servers)
        ///          Console.WriteLine(s.Host+":"+s.Port.ToString());
        ///    }
        ///    else Console.WriteLine("Master server didn't return any servers.");
        /// }
        /// catch(Exception ex) {
        ///    Console.Error.WriteLine("An Exception Occured!");
        ///    Console.Error.WriteLine(ex.ToString());
        /// }
        /// </code>
        /// </example>
        public static Collections.ServerCollection QueryMaster(MasterType type, MasterFilter filter, string host, ushort port)
        {
            IntPtr serversptr = GSQueryMaster((ushort)type, host, port, (ushort)filter);

            if (serversptr == IntPtr.Zero)
            {
                GSErrorCode err = GSLastError();
                switch (err)
                {
                case GSErrorCode.Ok:
                    return(null);

                case GSErrorCode.Winsock:
                case GSErrorCode.UnknownHost:
                case GSErrorCode.Connect:
                case GSErrorCode.Timeout:
                    throw new System.Net.Sockets.SocketException();

                case GSErrorCode.UnknownType:
                    throw new ArgumentOutOfRangeException("type");

                case GSErrorCode.Corrupt:
                    throw new CorruptPacketException();

                case GSErrorCode.UnknownPort:
                    throw new ArgumentException(GSErrorString(err), "port");

                case GSErrorCode.NotImplemented:
                    throw new NotImplementedException(GSErrorString(err));

                case GSErrorCode.InvalidParameter:
                    throw new ArgumentException(GSErrorString(err));
                }
            }

            Collections.ServerCollection sc = new Collections.ServerCollection();

            for (IntPtr cur = serversptr; cur != IntPtr.Zero;)
            {
                GS_SERVER server = (GS_SERVER)Marshal.PtrToStructure(cur, typeof(GS_SERVER));

                if (server.host != IntPtr.Zero)
                {
                    Server s = new Server();
                    s.Host = Marshal.PtrToStringAnsi(server.host);
                    s.Port = server.port;

                    sc.Add(s);
                }

                cur = server.next;
            }

            GSFreeServers(serversptr);

            return(sc);
        }
Example #2
0
        public async Task <ActionResult <MasterFilter> > PostMasterFilter(MasterFilter masterFilter)
        {
            _context.MasterFilter.Add(masterFilter);
            await _context.SaveChangesAsync();

            // Update Google
            var user        = _context.User.FirstOrDefault(f => f.Id == masterFilter.UserId);
            var accessToken = user.Token;

            foreach (var filter in masterFilter.SelectedFilter)
            {
                // get filter object from Google
                var        accountId       = filter.GoogleAccountId;
                var        filterId        = filter.GoogleFilterId;
                var        API             = $"https://www.googleapis.com/analytics/v3/management/accounts/{accountId}/filters/{filterId}";
                HttpClient getFilterClient = new HttpClient();
                getFilterClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
                getFilterClient.DefaultRequestHeaders.Add("Accept", "application/json");
                HttpResponseMessage response = await getFilterClient.GetAsync(API);

                var content = await response.Content.ReadAsStringAsync();

                var data = JsonConvert.DeserializeObject <RootObject>(content);

                // Update Filter Value
                data.excludeDetails.expressionValue = masterFilter.FilterValue;

                // Update Google
                HttpClient postFilterClient = new HttpClient();
                postFilterClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
                postFilterClient.DefaultRequestHeaders.Add("Accept", "application/json");
                // postFilterClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
                var postContent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");

                HttpResponseMessage putResponse = await postFilterClient.PutAsync(API, postContent);
            }

            return(CreatedAtAction("GetMasterFilter", new { id = masterFilter.Id }, masterFilter));
        }
Example #3
0
 /// <summary>
 /// Creates a new instance of the <see cref="GameStat.Collections.ServerCollection"/> class and queries a master server.
 /// </summary>
 /// <param name="type">One of the <see cref="GameStat.MasterType"/> values.</param>
 /// <param name="filter">One or more of the <see cref="GameStat.MasterFilter"/> values.</param>
 /// <returns>A new <see cref="GameStat.Collections.ServerCollection"/> class initialized with server information, or <c>null</c> if the master server didn't return any.</returns>
 /// <exception cref="System.Net.Sockets.SocketException">An error occurred when attempting to access the master server.</exception>
 /// <exception cref="System.ArgumentOutOfRangeException">The given <paramref name="type"/> is not recognized by GameStat.</exception>
 /// <exception cref="System.ArgumentException">An invalid argument was given.</exception>
 /// <exception cref="System.NotImplementedException">Support for the given <paramref name="type"/> is not implemented yet.</exception>
 /// <exception cref="GameStat.CorruptPacketException">A currupt or unknown packet was recieved from the master server.</exception>
 /// <example>
 /// This example queries the Counter-Strike master server and writes the resulting information to the console.
 /// <code lang="C#">
 ///
 /// try {
 ///    ServerCollection servers=ServerInfo.QueryMaster(MasterType.Counter-Strike,
 ///       MasterFilter.NotFull|MasterFilter.NotEmpty|MasterFilter.NoPassword);
 ///
 ///    if(servers!=null) {
 ///       foreach(Server s in servers)
 ///          Console.WriteLine(s.Host+":"+s.Port.ToString());
 ///    }
 ///    else Console.WriteLine("Master server didn't return any servers.");
 /// }
 /// catch(Exception ex) {
 ///    Console.Error.WriteLine("An Exception Occured!");
 ///    Console.Error.WriteLine(ex.ToString());
 /// }
 /// </code>
 /// </example>
 public static Collections.ServerCollection QueryMaster(MasterType type, MasterFilter filter)
 {
     return(QueryMaster(type, filter, null, 0));
 }
Example #4
0
 /// <summary>
 /// Creates a new instance of the <see cref="GameStat.Collections.ServerCollection"/> class and queries a master server.
 /// </summary>
 /// <param name="type">One of the <see cref="GameStat.MasterType"/> values.</param>
 /// <param name="filter">One or more of the <see cref="GameStat.MasterFilter"/> values.</param>
 /// <param name="host">The hostname/ip to query.</param>
 /// <returns>A new <see cref="GameStat.Collections.ServerCollection"/> class initialized with server information, or <c>null</c> if the master server didn't return any.</returns>
 /// <exception cref="System.Net.Sockets.SocketException">An error occurred when attempting to access the master server.</exception>
 /// <exception cref="System.ArgumentOutOfRangeException">The given <paramref name="type"/> is not recognized by GameStat.</exception>
 /// <exception cref="System.ArgumentException">An invalid argument was given.</exception>
 /// <exception cref="System.NotImplementedException">Support for the given <paramref name="type"/> is not implemented yet.</exception>
 /// <exception cref="GameStat.CorruptPacketException">A currupt or unknown packet was recieved from the master server.</exception>
 /// <remarks>
 ///    If <paramref name="host"/> is set to null, GameStat will try to guess it.  If <paramref name="host"/> can not be guessed, an <see cref="System.ArgumentException"/> will be thrown.
 /// </remarks>
 /// <example>
 /// This example queries the Counter-Strike master server and writes the resulting information to the console.
 /// <code lang="C#">
 ///
 /// try {
 ///    ServerCollection servers=ServerInfo.QueryMaster(MasterType.Counter-Strike,
 ///       MasterFilter.NotFull|MasterFilter.NotEmpty|MasterFilter.NoPassword, null);
 ///
 ///    if(servers!=null) {
 ///       foreach(Server s in servers)
 ///          Console.WriteLine(s.Host+":"+s.Port.ToString());
 ///    }
 ///    else Console.WriteLine("Master server didn't return any servers.");
 /// }
 /// catch(Exception ex) {
 ///    Console.Error.WriteLine("An Exception Occured!");
 ///    Console.Error.WriteLine(ex.ToString());
 /// }
 /// </code>
 /// </example>
 public static Collections.ServerCollection QueryMaster(MasterType type, MasterFilter filter, string host)
 {
     return(QueryMaster(type, filter, host, 0));
 }
Example #5
0
        public async Task <ActionResult> UpdateMasterFilter(int id, MasterFilter masterFilter)
        {
            var foundFilter = _context.MasterFilter.FirstOrDefault(m => m.Id == id);
            List <SelectedFilter> selectedFilter;

            if (foundFilter == null)
            {
                selectedFilter = masterFilter.SelectedFilter;
                masterFilter.SelectedFilter = null;
                _context.MasterFilter.Add(masterFilter);
                await _context.SaveChangesAsync();

                foundFilter = masterFilter;
            }
            else
            {
                // Update Database
                // Name
                foundFilter.Name = masterFilter.Name;
                // Value
                foundFilter.FilterValue = masterFilter.FilterValue;
                await _context.SaveChangesAsync();

                selectedFilter = masterFilter.SelectedFilter;
                //   // Delete All Selected Filters for the MasterFilter, and create new ones from the object
                var selectedFiltersToBeDeleted = _context.SelectedFilter.Where(w => w.MasterFilterId == foundFilter.Id);
                _context.SelectedFilter.RemoveRange(selectedFiltersToBeDeleted);
                await _context.SaveChangesAsync();
            }
            var user        = _context.User.FirstOrDefault(f => f.Id == masterFilter.UserId);
            var accessToken = user.Token;
            await _context.SaveChangesAsync();

            foreach (var filter in selectedFilter)
            {
                // update database
                var _filter = new SelectedFilter
                {
                    GoogleAccountId   = filter.GoogleAccountId,
                    GoogleFilterId    = filter.GoogleFilterId,
                    GoogleAccountName = filter.GoogleAccountName,
                    GoogleFilterName  = filter.GoogleFilterName,
                    MasterFilterId    = foundFilter.Id
                };
                await _context.SelectedFilter.AddAsync(_filter);

                await _context.SaveChangesAsync();

                // get filter object from Google
                var        accountId       = filter.GoogleAccountId;
                var        filterId        = filter.GoogleFilterId;
                var        API             = $"https://www.googleapis.com/analytics/v3/management/accounts/{accountId}/filters/{filterId}";
                HttpClient getFilterClient = new HttpClient();
                getFilterClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
                getFilterClient.DefaultRequestHeaders.Add("Accept", "application/json");
                HttpResponseMessage response = await getFilterClient.GetAsync(API);

                var content = await response.Content.ReadAsStringAsync();

                var data = JsonConvert.DeserializeObject <RootObject>(content);

                // Update Filter Value
                data.excludeDetails.expressionValue = masterFilter.FilterValue;

                // Update Google
                HttpClient postFilterClient = new HttpClient();
                postFilterClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
                postFilterClient.DefaultRequestHeaders.Add("Accept", "application/json");
                // postFilterClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
                var postContent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");

                HttpResponseMessage putResponse = await postFilterClient.PutAsync(API, postContent);
            }
            return(Ok(masterFilter));
        }