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); }
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); }
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"); } } }
public void Init(SimpleQAPrincipal user) { _user = user; CheckInit(); }