Exemplo n.º 1
0
        public static void CreateMessage(Models.MessageEntity entity)
        {
            Contracts.MessageContract contract = new Contracts.MessageContract(entity.RowKey, entity.PartitionKey);

            TableClient client = new TableClient(_TableName);
            QueueClient qclient = new QueueClient();

            Console.WriteLine("Inserting Entity");
            entity.ModifiedOn = System.DateTime.Now.ToString();
            client.InsertRow(entity);

            Console.WriteLine("Inserting Queue Msg");
            qclient.Send(contract);
        }
        /// <summary>
        /// Notifies a new incoming <see cref="Message"/>.
        /// </summary>
        /// <param name="message">The <see cref="Message"/>.</param>
        public void NotifyNewMessage(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(paramName: nameof(message));
            }

            var contract = new Contracts.MessageContract {
                OwnerId = message.OwnerId, Content = message.Content, DateTime = message.DateTime
            };

            foreach (var client in this.clients)
            {
                this.SendMessage(connection: client.Key, message: contract);
            }
        }
        /// <summary>
        /// Receives a new message from a client socket.
        /// </summary>
        /// <param name="connection">The <see cref="IWebSocketConnection"/>.</param>
        /// <param name="message">The incoming message.</param>
        private void OnNewMessage(IWebSocketConnection connection, string message)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(paramName: nameof(connection));
            }

            if (string.IsNullOrEmpty(value: message))
            {
                throw new ArgumentNullException(paramName: nameof(message));
            }

            if (!this.clients.ContainsKey(key: connection))
            {
                if (!this.clients.Values.Any(predicate: item => string.Equals(a: item.Item1, b: message, comparisonType: StringComparison.OrdinalIgnoreCase)))
                {
                    if (!this.dataStore.UserExist(userName: message))
                    {
                        var answer = new Contracts.MessageContract
                        {
                            Content  = "User not found",
                            DateTime = DateTime.UtcNow
                        };

                        this.SendMessage(connection: connection, message: answer);
                        connection.Close();
                        return;
                    }

                    var user   = this.dataStore.LoadUser(userName: message);
                    var client = new Tuple <string, int>(item1: message, item2: user.UserId);
                    this.clients.AddOrUpdate(
                        key: connection,
                        addValue: client,
                        updateValueFactory: (key, oldValue) => client);

                    this.logger.Format(
                        SeverityLevel.Info,
                        "Client connected on address {0} has name {1}.",
                        connection.ConnectionInfo.ClientIpAddress,
                        message);

                    this.NotifyUserStateChange(userId: user.UserId, state: UserState.Online);
                }
            }
        }