/// <summary> /// Constructor /// </summary> /// <param name="api">API</param> /// <param name="customServerInfo">Custom server information</param> /// <param name="errorLogPath">Error log path</param> /// <param name="host">Host</param> /// <param name="ipv4Address">IPv4 address</param> /// <param name="logPath">Log path</param> /// <param name="method">Method</param> /// <param name="port">Port</param> /// <param name="referer">Referer</param> /// <param name="useHTTPS">Use HTTPS</param> /// <param name="userAgent">User agent</param> /// <param name="version">Version</param> internal AnnouncerClient(EAnnouncerAPI api, string errorLogPath, SAMPServersAPIRequestDataContract customServerInfo, string host, string ipv4Address, string logPath, string method, ushort port, string referer, bool useHTTPS, string userAgent, string version) { API = api; this.errorLogPath = errorLogPath; CustomServerInfo = ((api == EAnnouncerAPI.SAMPServersAPI) ? customServerInfo : null); this.host = host; this.ipv4Address = ipv4Address; this.logPath = logPath; this.method = method; Port = port; this.referer = referer; UseHTTPS = useHTTPS; this.userAgent = userAgent; this.version = version; }
/// <summary> /// Create announcer /// </summary> /// <param name="configStream">Configuration stream</param> /// <param name="defaultPort">Default port</param> /// <param name="disposeConfigStreamWhenDone">Dispose config stream when done</param> /// <returns>Announcer if successful, otherwise "null"</returns> public static Announcer Create(Stream configStream, ushort defaultPort, bool disposeConfigStreamWhenDone) { Announcer ret = null; if (configStream != null) { if (configStream.CanRead) { ConfigDataContract config = serializer.ReadObject(configStream) as ConfigDataContract; if (config != null) { List<AnnouncerClient> announcer_clients = new List<AnnouncerClient>(); string ipv4_address = null; foreach (AnnouncereDataContract announcer in config.Announcers) { if (announcer != null) { if (announcer.Port == 0) { announcer.Port = defaultPort; } if (announcer.IsValid) { try { if (((announcer.API == EAnnouncerAPI.SAMPServersAPI) || (announcer.API == EAnnouncerAPI.SACNRMonitorAPI)) && (ipv4_address == null)) { ipv4_address = config.IPv4Address; if (ipv4_address.Length <= 0) { foreach (string ipv4_service_uri in config.IPv4ServiceURIs) { if (!(string.IsNullOrWhiteSpace(ipv4_service_uri))) { Uri uri = new Uri(ipv4_service_uri.Trim()); HttpWebRequest ipv4_address_http_web_request = WebRequest.CreateHttp(uri); if (ipv4_address_http_web_request != null) { ipv4_address_http_web_request.Headers.Add(HttpRequestHeader.Accept, "*/*"); ipv4_address_http_web_request.Headers.Add(HttpRequestHeader.UserAgent, config.UserAgent); ipv4_address_http_web_request.Headers.Add(HttpRequestHeader.Host, uri.Host); using (HttpWebResponse response = ipv4_address_http_web_request.GetResponse() as HttpWebResponse) { if (response.StatusCode == HttpStatusCode.OK) { using (Stream response_stream = response.GetResponseStream()) { using (StreamReader response_reader = new StreamReader(response_stream)) { ipv4_address = response_reader.ReadToEnd().Trim(); } } } } } } } } } } catch (Exception e) { Console.Error.WriteLine(e); } if (((announcer.API != EAnnouncerAPI.SAMPServersAPI) && (announcer.API != EAnnouncerAPI.SACNRMonitorAPI)) || (ipv4_address != null)) { SAMPServersAPIRequestDataContract custom_server_info = (announcer.UseCustomServerInfo ? config.CustomServerInfo : null); announcer_clients.Add(new AnnouncerClient(announcer.API, config.ErrorLogPath, custom_server_info, announcer.Host, ((announcer.API == EAnnouncerAPI.SAMPServersAPI) || (announcer.API == EAnnouncerAPI.SACNRMonitorAPI)) ? ipv4_address : string.Empty, config.LogPath, (announcer.Method == null) ? ((announcer.API == EAnnouncerAPI.SACNRMonitorAPI) ? WebRequestMethods.Http.Post : ((announcer.API == EAnnouncerAPI.SAMPServersAPI) ? ((custom_server_info == null) ? WebRequestMethods.Http.Post : "PATCH") : WebRequestMethods.Http.Get)) : announcer.Method, announcer.Port, announcer.Referer, announcer.UseHTTPS, announcer.UserAgent, announcer.Version)); } } } } ret = new Announcer(announcer_clients.ToArray()); announcer_clients.Clear(); } } if (disposeConfigStreamWhenDone) { configStream.Dispose(); } } return ret; }