private Response handleRequest(Request request)
        {
            Response response = null;

            if (request is LoginRequest)
            {
                Console.WriteLine("Login request ...");
                LoginRequest logReq = (LoginRequest)request;
                UserDto      udto   = logReq.User;
                User         user   = DtoUtils.GetFromDto(udto);
                try
                {
                    lock (server)
                    {
                        server.Login(user, this);
                    }
                    return(new OkResponse());
                }
                catch (Error e)
                {
                    connected = false;
                    return(new ErrorResponse(e.Message));
                }
            }
            if (request is LogoutRequest)
            {
                Console.WriteLine("Logout request");
                LogoutRequest logReq = (LogoutRequest)request;
                UserDto       udto   = logReq.User;
                User          user   = DtoUtils.GetFromDto(udto);
                try
                {
                    lock (server)
                    {
                        server.Logout(user, this);
                    }
                    connected = false;
                    return(new OkResponse());
                }
                catch (Error e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }

            if (request is GetShowsRequest)
            {
                Console.WriteLine("Get shows request");
                GetShowsRequest getShowsRequest = (GetShowsRequest)request;
                try
                {
                    Show[]    shows    = server.GetAll();
                    ShowDto[] showDtos = DtoUtils.getDto(shows);
                    return(new GetShowsResponse(showDtos));
                }
                catch (Error e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }

            if (request is GetArtistsByDateRequest)
            {
                Console.WriteLine("Get artists by date request");
                GetArtistsByDateRequest getArtistsByDateRequest = (GetArtistsByDateRequest)request;
                String date = getArtistsByDateRequest.Date;
                try
                {
                    Artist[]    artists    = server.GetArtists(date);
                    ArtistDto[] artistDtos = DtoUtils.GetDto(artists);
                    return(new GetArtistsByDateResponse(artistDtos));
                }
                catch (Error e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }

            if (request is BuyTicketRequest)
            {
                Console.WriteLine("Buy ticket request");
                BuyTicketRequest buyTicketRequest = (BuyTicketRequest)request;
                TicketDto        ticketDto        = buyTicketRequest.TicketDto;
                Ticket           ticket           = DtoUtils.GetFromDto(ticketDto);
                try
                {
                    lock (server)
                    {
                        server.SellTickets(ticket);
                    }
                    return(new OkResponse());
                }
                catch (InvalidPurchaseException e)
                {
                    return(new ErrorResponse(e.Message));
                }
                catch (Error e)
                {
                    return(new ErrorResponse(e.Message));
                }
            }
            return(response);
        }