private void SendError(HttpStatusCode code, Socket sender)
        {
            var errResponse = new CreateChannelResponsePacket(new CreateChannelResponsePacketData(
                                                                  (int)code,
                                                                  null
                                                                  ));

            Zephy.serverSocket.SendPacket(errResponse, sender);
        }
        protected override void Handle(CreateChannelRequestPacket packet, Socket sender)
        {
            var data = packet.Data;

            if (data == null)
            {
                return;
            }

            // check whether request is valid
            if (data.withMembers.Count <= 1 || Util.HasDuplicates(data.withMembers))
            {
                SendError(HttpStatusCode.BadRequest, sender);
                return;
            }

            ActiveUser user = ActiveUsers.GetUser(sender);

            if (user == null)
            {
                SendError(HttpStatusCode.Unauthorized, sender);
                return;
            }

            if (channelCrud.Exists(data.withMembers))
            {
                SendError(HttpStatusCode.Conflict, sender);
                return;
            }

            // create actual channel
            var newChannel = new Channel()
            {
                name    = data.name,
                members = data.withMembers,
            };

            channelCrud.CreateOne(newChannel);

            var successResponse = new CreateChannelResponsePacket(new CreateChannelResponsePacketData(
                                                                      (int)HttpStatusCode.OK,
                                                                      newChannel
                                                                      ));

            Zephy.serverSocket.SendPacket(successResponse, sender);
        }