コード例 #1
0
        private void AppendQuestion(XElement question, ConcurrentDictionary <String, String> idmap, IDictionary <String, String> usermap)
        {
            if (question.Attribute("OwnerUserId") == null || question.Attribute("Id") == null)
            {
                return;
            }

            var id     = question.Attribute("Id").Value;
            var userId = question.Attribute("OwnerUserId").Value;

            var user = new SimpleQAPrincipal(usermap[userId], "whatever", "", 0);

            var tags = Regex.Matches(question.Attribute("Tags").Value, "<(.*?)>")
                       .OfType <Match>()
                       .Select(m => m.ToString())
                       .Select(s => s.Substring(1, s.Length - 2))
                       .ToArray();

            var creationDate = DateTime.Parse(question.Attribute("CreationDate").Value);
            var views        = Int32.Parse(question.Attribute("ViewCount").Value);

            var command = new QuestionCreateCommand(question.Attribute("Title").Value,
                                                    question.Attribute("Body").Value,
                                                    question.Attribute("Body").Value,
                                                    creationDate,
                                                    tags);
            var sw = new Stopwatch();

            sw.Start();
            var result = _mediator.ExecuteAsync <QuestionCreateCommand, QuestionCreateCommandResult>(command, user.GetAppIdentity(), CancellationToken.None).Result;

            sw.Stop();

            var viewCommand = new VisitQuestionCommand(result.Id, views);

            _mediator.ExecuteAsync <VisitQuestionCommand, VisitQuestionCommandResult>(viewCommand, user.GetAppIdentity(), CancellationToken.None).Wait();

            Console.WriteLine("Added question: " + result.Slug + ",  " + question.Attribute("Body").Value.Length + " chars in " + sw.ElapsedMilliseconds + " ms.");

            idmap.TryAdd(id, result.Id);
        }
コード例 #2
0
        private void AppendAnswer(String questionId, XElement answer, ConcurrentDictionary <String, String> idmap, IDictionary <String, String> usermap)
        {
            if (answer.Attribute("OwnerUserId") == null || answer.Attribute("Id") == null)
            {
                return;
            }

            var userId       = answer.Attribute("OwnerUserId").Value;
            var creationDate = DateTime.Parse(answer.Attribute("CreationDate").Value);

            var command = new AnswerCreateCommand(questionId,
                                                  creationDate,
                                                  answer.Attribute("Body").Value,
                                                  answer.Attribute("Body").Value);

            var user   = new SimpleQAPrincipal(usermap[userId], "whatever", "", 0);
            var result = _mediator.ExecuteAsync <AnswerCreateCommand, AnswerCreateCommandResult>(command, user.GetAppIdentity(), CancellationToken.None).Result;

            idmap.TryAdd(answer.Attribute("Id").Value, result.QuestionId + "@" + result.AnswerId);

            Console.WriteLine("Added answer for: " + questionId);
        }
コード例 #3
0
        private async Task ProcessWebSocket(AspNetWebSocketContext context, SimpleQAPrincipal user, CancellationToken cancel)
        {
            var websocket = context.WebSocket;

            // I am assuming small messages that will be
            // always smaller than 8K.
            var readBuffer  = new Byte[8192];
            var writeBuffer = new Byte[8192];

            using (var messaging = DependencyResolver.Current.GetService <IMessaging>())
            {
                messaging.Init(user);

                var sending = Task.Run(async() =>
                {
                    try
                    {
                        await ProcessIncomingMessaging(websocket, messaging, writeBuffer, cancel).ConfigureAwait(false);
                    }
                    catch (OperationCanceledException) { }
                    catch (Exception ex)
                    {
                        _logger.Error(ex, "Error processing incoming messaging");
                    }
                }, cancel);

                try
                {
                    await ProcessingOutgoingMessaging(cancel, websocket, readBuffer, messaging).ConfigureAwait(false);
                }
                catch (OperationCanceledException) { }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Error processing outgoing messaging");
                }
            }
        }
コード例 #4
0
 public void Init(SimpleQAPrincipal user)
 {
     _user = user;
     CheckInit();
 }