예제 #1
0
 internal WurmServer(WurmServerInfo wurmServerInfo, [NotNull] QueuedJobsSyncRunner<Job, JobResult> jobRunner)
 {
     if (wurmServerInfo == null) throw new ArgumentNullException("wurmServerInfo");
     if (jobRunner == null) throw new ArgumentNullException("jobRunner");
     this.wurmServerInfo = wurmServerInfo;
     this.jobRunner = jobRunner;
 }
예제 #2
0
 internal WurmServer(WurmServerInfo wurmServerInfo, [NotNull] QueuedJobsSyncRunner <Job, JobResult> jobRunner)
 {
     if (wurmServerInfo == null)
     {
         throw new ArgumentNullException(nameof(wurmServerInfo));
     }
     if (jobRunner == null)
     {
         throw new ArgumentNullException(nameof(jobRunner));
     }
     this.wurmServerInfo = wurmServerInfo;
     this.jobRunner      = jobRunner;
 }
예제 #3
0
        public WurmServer Create(WurmServerInfo wurmServerInfo)
        {
            if (createdServers.Contains(wurmServerInfo.Name))
            {
                throw new InvalidOperationException("this factory has already created Server for name " + wurmServerInfo.Name);
            }

            var server = new WurmServer(wurmServerInfo, jobRunner);

            createdServers.Add(wurmServerInfo.Name);

            return server;
        }
예제 #4
0
        public WurmServer Create(WurmServerInfo wurmServerInfo)
        {
            if (createdServers.Contains(wurmServerInfo.ServerName))
            {
                throw new InvalidOperationException("this factory has already created Server for name " + wurmServerInfo.ServerName);
            }

            var server = new WurmServer(wurmServerInfo, jobRunner);

            createdServers.Add(wurmServerInfo.ServerName);

            return(server);
        }
예제 #5
0
        private WurmServer RegisterServer(WurmServerInfo wurmServerInfo)
        {
            var normalizedName = wurmServerInfo.ServerName;

            if (nameToServerMap.ContainsKey(normalizedName))
            {
                throw new WurmApiException("Server already registered: " + wurmServerInfo);
            }

            var server = wurmServerFactory.Create(wurmServerInfo);

            nameToServerMap.Add(normalizedName, server);

            return(server);
        }
예제 #6
0
        public void UpdateWurmApiConfigDictionary(IDictionary <ServerName, WurmServerInfo> dictionary)
        {
            foreach (var serverInformation in infos)
            {
                if (string.IsNullOrWhiteSpace(serverInformation.ServerName))
                {
                    continue;
                }

                var serverName = new ServerName(serverInformation.ServerName);
                dictionary[serverName] = new WurmServerInfo(serverInformation.ServerName,
                                                            serverInformation.ServerStatsUrl ?? string.Empty,
                                                            new ServerGroup(serverInformation.ServerGroup ?? string.Empty));
            }
        }
예제 #7
0
        public async Task <WebDataExtractionResult> ExtractAsync(WurmServerInfo serverInfo)
        {
            WebDataExtractionResult result = new WebDataExtractionResult(serverInfo.ServerName);

            var res = await httpWebRequests.GetResponseAsync(serverInfo.WebStatsUrl).ConfigureAwait(false);

            DateTime headerLastUpdated = res.LastModified;

            using (Stream stream = res.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    bool   canReadServerName = false;
                    bool   canReadUptime     = false;
                    bool   canReadWurmTime   = false;
                    string line;
                    string strUptime       = string.Empty;
                    string strWurmDateTime = string.Empty;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (canReadServerName)
                        {
                            Match  match = Regex.Match(line, @">.+<");
                            string name  = match.Value.Substring(1, match.Value.Length - 2);
                            if (!string.Equals(name, serverInfo.ServerName.Original, StringComparison.InvariantCultureIgnoreCase))
                            {
                                throw new WurmApiException(
                                          string.Format(
                                              "Extracted server name does not match server description, expected {0}, actual {1}",
                                              serverInfo.ServerName.Original,
                                              name));
                            }
                            canReadServerName = false;
                        }
                        else if (canReadUptime)
                        {
                            Match match = Regex.Match(line, @">.+<");
                            strUptime     = match.Value.Substring(1, match.Value.Length - 2);
                            canReadUptime = false;
                        }
                        else if (canReadWurmTime)
                        {
                            Match match = Regex.Match(line, @">.+<");
                            strWurmDateTime = match.Value.Substring(1, match.Value.Length - 2);
                            canReadWurmTime = false;
                        }

                        if (Regex.IsMatch(line, "Server name"))
                        {
                            canReadServerName = true;
                        }
                        else if (Regex.IsMatch(line, "Uptime"))
                        {
                            canReadUptime = true;
                        }
                        else if (Regex.IsMatch(line, "Wurm Time"))
                        {
                            canReadWurmTime = true;
                        }
                    }

                    DateTime dtnow = Time.Get.LocalNow;
                    if (headerLastUpdated > dtnow)
                    {
                        headerLastUpdated = dtnow;
                    }

                    TimeSpan uptime = GetTimeSpanFromUptimeWebString(strUptime);
                    result.ServerUptime = uptime;

                    WurmDateTime wdt = GetWurmDateTimeFromWdtWebString(strWurmDateTime);
                    result.WurmDateTime = wdt;

                    result.LastUpdated = headerLastUpdated;
                }
            }

            return(result);
        }
예제 #8
0
 public WebDataExtractionResult Extract(WurmServerInfo serverInfo)
 {
     return(TaskHelper.UnwrapSingularAggegateException(() => ExtractAsync(serverInfo).Result));
 }
예제 #9
0
        private void RegisterServer(WurmServerInfo wurmServerInfo)
        {
            var normalizedName = wurmServerInfo.Name;
            if (this.nameToServerMap.ContainsKey(normalizedName))
            {
                throw new WurmApiException("Server already registered: " + wurmServerInfo);
            }

            var server = wurmServerFactory.Create(wurmServerInfo);

            this.nameToServerMap.Add(normalizedName, server);
        }
예제 #10
0
        public async Task<WebDataExtractionResult> ExtractAsync(WurmServerInfo serverInfo)
        {
            WebDataExtractionResult result = new WebDataExtractionResult(serverInfo.Name);

            var res = await this.httpWebRequests.GetResponseAsync(serverInfo.WebStatsUrl).ConfigureAwait(false);
            DateTime headerLastUpdated = res.LastModified;

            using (Stream stream = res.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    bool canReadServerName = false;
                    bool canReadUptime = false;
                    bool canReadWurmTime = false;
                    string line;
                    string strUptime = string.Empty;
                    string strWurmDateTime = string.Empty;
                    while ((line = reader.ReadLine()) != null)
                    {
                        if (canReadServerName)
                        {
                            Match match = Regex.Match(line, @">.+<");
                            string name = match.Value.Substring(1, match.Value.Length - 2);
                            if (!string.Equals(name, serverInfo.Name.Original, StringComparison.InvariantCultureIgnoreCase))
                            {
                                throw new WurmApiException(
                                    string.Format(
                                        "Extracted server name does not match server description, expected {0}, actual {1}",
                                        serverInfo.Name.Original,
                                        name));
                            }
                            canReadServerName = false;
                        }
                        else if (canReadUptime)
                        {
                            Match match = Regex.Match(line, @">.+<");
                            strUptime = match.Value.Substring(1, match.Value.Length - 2);
                            canReadUptime = false;
                        }
                        else if (canReadWurmTime)
                        {
                            Match match = Regex.Match(line, @">.+<");
                            strWurmDateTime = match.Value.Substring(1, match.Value.Length - 2);
                            canReadWurmTime = false;
                        }

                        if (Regex.IsMatch(line, "Server name"))
                        {
                            canReadServerName = true;
                        }
                        else if (Regex.IsMatch(line, "Uptime"))
                        {
                            canReadUptime = true;
                        }
                        else if (Regex.IsMatch(line, "Wurm Time"))
                        {
                            canReadWurmTime = true;
                        }
                    }

                    DateTime dtnow = Time.Get.LocalNow;
                    if (headerLastUpdated > dtnow)
                    {
                        headerLastUpdated = dtnow;
                    }

                    TimeSpan uptime = GetTimeSpanFromUptimeWebString(strUptime);
                    result.ServerUptime = uptime;

                    WurmDateTime wdt = GetWurmDateTimeFromWdtWebString(strWurmDateTime);
                    result.WurmDateTime = wdt;

                    result.LastUpdated = headerLastUpdated;
                }
            }

            return result;
        }
예제 #11
0
 public WebDataExtractionResult Extract(WurmServerInfo serverInfo)
 {
     return TaskHelper.UnwrapSingularAggegateException(() => ExtractAsync(serverInfo).Result);
 }