Example #1
0
        void SendError(HttpStatusCode code, Socket sender)
        {
            var err = new SendMessageResponsePacket(new SendMessageResponsePacketData(
                                                        (int)code, null, null
                                                        ));

            Zephy.serverSocket.SendPacket(err, sender);
        }
Example #2
0
        protected override void Handle(SendMessageRequestPacket packet, Socket sender)
        {
            var data = packet.Data;

            if (data == null)
            {
                return;
            }

            // check if request is valid
            Channel channel = channelCrud.ReadOneById(data.forChannel);

            if (
                string.IsNullOrWhiteSpace(data.forChannel) ||
                string.IsNullOrWhiteSpace(data.content) ||
                channel == null)
            {
                SendError(HttpStatusCode.BadRequest, sender);
                return;
            }

            ActiveUser senderUser = ActiveUsers.GetUser(sender);

            if (senderUser == null || !channel.members.Contains(senderUser.userId))
            {
                SendError(HttpStatusCode.Unauthorized, sender);
                return;
            }


            // add new message to database
            var newMessage = new Message
            {
                content = data.content,
                sentAt  = Util.ToUnixTimestamp(DateTime.Now),
                author  = senderUser.userId,
                channel = channel._id,
            };

            messageCrud.CreateOne(newMessage);

            channelCrud.UpdateOne(channel._id, channel);

            // send response to members of channel (only if success!)
            var responsePacket = new SendMessageResponsePacket(new SendMessageResponsePacketData(
                                                                   (int)HttpStatusCode.OK, messageCrud.ReadOnePopulated(newMessage._id), channel._id
                                                                   ));

            foreach (string memberId in channel.members)
            {
                if (ActiveUsers.IsLoggedIn(memberId))
                {
                    Zephy.serverSocket.SendPacket(responsePacket, ActiveUsers.GetUser(memberId).clientSocket);
                }
            }
        }