Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
 }