public async Task SendMessage([FromBody] Postmessage postmessage) { try { nickname = await _hubRepository.GetCurrentUserNickName(Context.UserIdentifier); room = await _hubRepository.FindAndValidateRoom(postmessage.RoomId, Context.UserIdentifier); post = _hubRepository.CreateAndValidatePost(postmessage, Context.UserIdentifier); receivers = _hubRepository.FindReceivers(room).ToList(); // Subscribe to event _hubLogger._connections.UserAdded += UserAddedCallback; // Send Websocket message await SendWSMessage(room.IsPublic?Clients.All : Clients.Users(receivers)); // Message saved await _hubRepository.SavePost(post); } catch (MyChatHubException ex) { // sendAsync exceptions are also caught here // create custom IHubRepository exception // create generoic message for all other exceptions await Clients.Caller.SendAsync("ErrorMessage", ex.Message); } catch (Exception ex) { await Clients.Caller.SendAsync("ErrorMessage", "FatalError"); } finally { // System.Console.WriteLine ("FINALLY!"); // UNSUBSCRIBE TO EVENT _hubLogger._connections.UserAdded -= UserAddedCallback; } }
public Postmessage CreatePostmessage() { Postmessage postmessage = new Postmessage { CreationDate = DateTime.Now, Status = PostmessageStatus.Creation, Message = _messageResolver.Resolve(), SentDate = (DateTime)SqlDateTime.MinValue, ReceivedDate = (DateTime)SqlDateTime.MinValue }; _postmessageRepository.Create(postmessage); return(postmessage); }
private void DoWork(object state) { int executionCount = 0; var count = Interlocked.Increment(ref executionCount); _logger.LogInformation( "Publisher Service is working. Count: {Count}", count); Postmessage postmessage = _postmessageService.CreatePostmessage(); if (_postmessageService.SendPostmessageToBus(postmessage)) { postmessage.Status = PostmessageStatus.Sent; } else { postmessage.Status = PostmessageStatus.TrySend; }; _postmessageService.UpdatePostmessage(postmessage); }
public Post CreateAndValidatePost(Postmessage postMessage, string userId) { var modelStateValidator = new ModelStateValidator(); var validatePostMessage = modelStateValidator.ValidatePost <Postmessage>(postMessage); if (!validatePostMessage) { throw new MyChatHubException(modelStateValidator.validationResults.FirstOrDefault().ErrorMessage); } var post = CreatePost(postMessage.Message, postMessage.RoomId, userId); bool isValid = modelStateValidator.ValidatePost <Post>(post); if (!isValid) { throw new MyChatHubException(modelStateValidator.validationResults.FirstOrDefault().ErrorMessage); } return(post); }
public Postmessage UpdatePostmessage(Postmessage postmessage) { _postmessageRepository.Update(postmessage); return(postmessage); }
public bool SendPostmessageToBus(Postmessage postmessage) { return(_transitManager.Publish("PostBridge.Publisher", postmessage)); }
public bool CheckPostmessageInBus(Postmessage postmessage) { throw new System.NotImplementedException(); }
public void Handle(Postmessage message) { message.Status = PostmessageStatus.Receved; message.ReceivedDate = DateTime.Now; _postmessageRepository.Update(message); }