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