@Override
  public void run() {
    final InfoProvider locInfoProvider = InfoProviderManager.getFileProvider();
    final IMessage locMessage = getMessage();

    if (locMessage instanceof DisconnectMessage == false) {
      locInfoProvider.appendMessage(
          Level.SEVERE, "Le type du message est incorrect. Le message reçu est : " + locMessage);
      SystemUtil.close(getSocket());
      return;
    }

    DisconnectMessage locDiscoMess = (DisconnectMessage) locMessage;

    // On supprime le user
    Caches.user().remove(locDiscoMess.getLogin());

    // On supprime la partie
    final String partie = locDiscoMess.getPartie();
    if (StringUtil.isNotEmpty(partie)) {
      final AbstractCache<String, Partie> locPartiesCache = Caches.parties();
      final Partie locPartie = locPartiesCache.get(partie);
      if (locPartie.isEmpty()) {
        locPartiesCache.remove(partie);
      }
    }

    SystemUtil.close(getSocket());
  }