public void run(){
           ConsoleHelper.writeMessage(socket.getRemoteSocketAddress().toString());
           String nameUser = null;
           try {
               Connection connection = new Connection(socket);
               try {
                   nameUser = serverHandshake(connection);
                   sendBroadcastMessage(new Message(MessageType.USER_ADDED, nameUser));
                   sendListOfUsers(connection, nameUser);
                   serverMainLoop(connection, nameUser);
               } catch (ClassNotFoundException e) {
                   e.printStackTrace( );
                   ConsoleHelper.writeMessage("ошибка при обмене данными с удаленным адресом");
               }
           } catch (IOException e) {
               e.printStackTrace( );
               ConsoleHelper.writeMessage("ошибка при обмене данными с удаленным адресом");
           }
           finally {
               if (nameUser != null){
                   connectionMap.remove(nameUser);
                   sendBroadcastMessage(new Message(MessageType.USER_REMOVED,nameUser));
               }
           }
           ConsoleHelper.writeMessage("соединение с удаленным адресом закрыто");
       }