コード例 #1
0
        private void SaveMessage(Message message)
        {
            var sender = _participants.FirstOrDefault(p => p.Id == message.Sender);

            using (var database = new RozmawiatorDb())
            {
                var senderUser = database.Users.FirstOrDefault(u => u.UserName == sender.Nickname);
                if (senderUser == null)
                {
                    return;
                }

                var conversation = database.Conversations.First(c => c.Id == _conversationId);

                var msg = new Database.Entities.Message
                {
                    Content      = message.GetTextContent(),
                    Conversation = conversation,
                    Sender       = senderUser,
                    Timestamp    = DateTime.Now
                };
                database.Messages.Add(msg);
                database.SaveChanges();
            }
        }
コード例 #2
0
        public void HandleMessage(Message message)
        {
            switch (message.Type)
            {
            case Message.MessageType.Hello:
            case Message.MessageType.Bye:
            case Message.MessageType.KeepAlive:
            case Message.MessageType.Call:
            case Message.MessageType.CallRequest:
            case Message.MessageType.CallResponse:
            case Message.MessageType.CloseConversation:
            case Message.MessageType.DirectText:
                return;

            case Message.MessageType.Text:
                SaveMessage(message);
                break;

            case Message.MessageType.Audio:
                Resend(message, true);
                return;

            case Message.MessageType.HelloConversation:
                break;

            case Message.MessageType.ByeConversation:
                Disconnect(Server.GetClient(message.Sender));
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Resend(message);
        }
コード例 #3
0
        public void Broadcast(Message message, bool skipSender = false)
        {
            var sender = Server.GetClient(message.Sender);

            foreach (var client in _participants.Where(p => !skipSender || p != sender))
            {
                client.Send(message);
            }
        }
コード例 #4
0
        public void Resend(Message message, bool skipSender = false)
        {
            Broadcast(message, skipSender);
            return;

            /*
             * if (message.Receiver == 0)
             * {
             *  Broadcast(message);
             * }
             * else
             * {
             *  Server.Send(Server.GetClient(message.Receiver), message);
             * }
             */
        }