예제 #1
0
        async Task <string> SendCommand(string command, ushort?overridePort, CancellationToken cancellationToken)
        {
            try
            {
                var commandString = String.Format(CultureInfo.InvariantCulture,
                                                  "?{0}={1}&{2}={3}",
                                                  byondTopicSender.SanitizeString(Constants.DMInteropAccessIdentifier),
                                                  byondTopicSender.SanitizeString(reattachInformation.AccessIdentifier),
                                                  byondTopicSender.SanitizeString(Constants.DMParameterCommand),
                                                  command); // intentionally don't sanitize command, that's up to the caller

                var targetPort = overridePort ?? reattachInformation.Port;
                logger.LogTrace("Export to :{0}. Query: {1}", targetPort, commandString);

                return(await byondTopicSender.SendTopic(
                           new IPEndPoint(IPAddress.Loopback, targetPort),
                           commandString,
                           cancellationToken).ConfigureAwait(false));
            }
            catch (OperationCanceledException)
            {
                throw;
            }
            catch (Exception e)
            {
                logger.LogInformation("Send command exception:{0}{1}", Environment.NewLine, e.Message);
                return(null);
            }
        }
        /// <inheritdoc />
        public Task ProcessPayload(PullRequestEventPayload payload, CancellationToken cancellationToken)
        {
            if (payload == null)
            {
                throw new ArgumentNullException(nameof(payload));
            }
            switch (payload.Action)
            {
            case "opened":
            case "closed":
            case "reopened":
                //reserialize it
                //.htmlSpecialChars($payload['sender']['login']).': <a href="'.$payload['pull_request']['html_url'].'">'.htmlSpecialChars('#'.$payload['pull_request']['number'].' '.$payload['pull_request']['user']['login'].' - '.$payload['pull_request']['title']).'</a>';
                var json = new SimpleJsonSerializer().Serialize(payload);
                json = byondTopicSender.SanitizeString(json);
                const string innerAnnouncementFormatter = "#{0} {1} - {2}";

                var announcement = String.Format(CultureInfo.CurrentCulture, innerAnnouncementFormatter, payload.PullRequest.Number, payload.PullRequest.User.Login, payload.PullRequest.Title);
                announcement = HttpUtility.HtmlEncode(announcement);
                var announcmentFormatter = stringLocalizer["AnnouncementFormatter"];                        // "[{0}] Pull Request {1} by {2}: <a href='{3}'>{4}</a>";
                announcement = String.Format(CultureInfo.CurrentCulture, announcmentFormatter, payload.Repository.FullName, payload.PullRequest.Merged ? stringLocalizer["Merged"] : payload.Action, payload.Sender.Login, payload.PullRequest.HtmlUrl, announcement);
                announcement = byondTopicSender.SanitizeString(announcement);

                var startingQuery = String.Format(CultureInfo.InvariantCulture, "?announce={0}&payload={1}&key=", json, announcement);

                var tasks = new List <Task>();
                foreach (var I in serverConfiguration.Entries)
                {
                    var final = startingQuery + byondTopicSender.SanitizeString(I.CommsKey);
                    tasks.Add(byondTopicSender.SendTopic(I.Address, I.Port, final, cancellationToken));
                }
                return(Task.WhenAll(tasks));
            }
            throw new NotSupportedException();
        }