// this has to work for every request
        // this handles multi-threading
        public Message Response(String request, List <String> args)//Request request)
        {
            int delay = seedRandom.Next(server.getMinDelay(), server.getMaxDelay());

            Thread.Sleep(delay);

            Message mess;

            if (isFrozen)
            {
                this.IncrementFrozenRequests();
                while (this.isFrozen)
                {
                    this.handler.WaitOne();
                }

                mess = requestHandle(request, args);

                this.DecrementFrozenRequests();
                this.frozenRequestsHandler.Set();
                this.frozenRequestsHandler.Reset();
            }
            else
            {
                while (this.frozenRequests > 0)
                {
                    this.frozenRequestsHandler.WaitOne();
                }

                mess = requestHandle(request, args);
            }

            return(mess);
        }