Telnet dans un dialog

0/5 (2 avis)

Snippet vu 4 977 fois - Téléchargée 19 fois

Contenu du snippet

Voila, j'ai vu pas mal de codes permettant d'utiliser telnet dans des dialog ...
J'ai remarqué qu'elles avaient un nombre limités de connexions (soit par la taille du dialog, soit autre chose), enfin, il me semble!

Donc voila, j'ai décidé de créer une autre petite source qui regroupe les connexions dans une liste... ce qui ne pause plus de problèmes d'onglets, etc ...

Source / Exemple :


on *:load: { mkdir telnet }
dialog telnet {
  size -1 -1 500 238
  title "Telnet"

  text "Serveur:port" , 1 , 0 2 60 20
  edit "" , 2 , 70 0 100 18 , autohs
  button "Connecter" , 3 , 175 0 100 18 , flat

  text "Connexions:" , 4 , 0 20 60 20 
  list 5 , 70 18 100 20
  button "Déconnecter" , 6 , 175 18 100 18 , flat

  list  7 , 0 45 500 180 ,  vsbar hsbar
  edit "" , 8 , 0 218 500 20 , autohs
  button "." , 9 , 1000 1000 0 0 
  button "Fermer" , 10 , 300 0 200 36 , ok
}

on *:dialog:telnet:*:*: {
  if ($devent = init) { did -t telnet 9 }
  elseif ($devent = close) {
    if ($hget(telnet,1).item) { hfree telnet } | sockclose telnet* 
    set %end 1 
    while ($findfile(telnet,*.*,%end)) { .remove $findfile(telnet,*.*,%end) | inc %end }
    unset %end
  }
  elseif ($devent = sclick) {
    if ($did == 3) && ($gettok($did(telnet,2).text,2,58)) {
      %telnet = telnet- $+ $_r(10)

      if (!$hget(telnet,1).item) { hadd -m telnet 1 %telnet $+ $chr(156) $+ $gettok($did(telnet,2).text,1,58) }
      else { hadd -m telnet $calc($hget(telnet,0).item +1) %telnet $+ $chr(156) $+ $gettok($did(telnet,2).text,1,58) }
      sockopen %telnet $gettok($did(telnet,2).text,1,58) $gettok($did(telnet,2).text,2,58)
    }
    elseif ($did == 5) && ($did(telnet,5).seltext) {
      hadd -m telnet current $reference($did(telnet,5).seltext) 
      telnet load $reference($did(telnet,5).seltext)
    }
    elseif ($did == 6) && ($did(telnet,5).seltext) { telnet close $reference($did(telnet,5).seltext) }
    elseif ($did == 9) && ($did(telnet,8).text) { telnet send $hget(telnet,current) $did(telnet,8).text }
  }
  return
}
alias -l reference {
  if (!$1) { return }
  %ref = 1 | while ($hget(telnet,%ref)) {
    if ($gettok($hget(telnet,%ref),2,156) == $1) { return $gettok($hget(telnet,%ref),1,156) }
    inc %ref
  }
}

alias telnet {
  if ($1 == close) && ($2) {
    sockclose $2 | write -c telnet\ $+ $2
    hrem $2
  }
  elseif ($1 == send) && ($3) {
    did -r telnet 8
    sockwrite -n $2 $3-
    write telnet\ $+ $2 $time * << $3-
    did -a telnet 7 $time * << $3-
  }
  elseif ($1 == load) && ($2) {

    did -r telnet 7 | %yyi = 1 | %yyi.file = telnet\ $+ $2
    while ($read(%yyi.file, %yyi)) { did -a telnet 7 $read(%yyi.file, %yyi) | inc %yyi }
  }
  elseif ($1 == reload) { did -r telnet 5
    %yyi = 1 | while ($hget(telnet,%yyi)) { did -a telnet 5 $gettok($hget(telnet,%yyi),2,156) | inc %yyi }
  }
  unset %yyi*
}
on *:sockopen:telnet-*: {
  did -ra telnet 7 $time * Connexion en cours... 
  if ($sockerr) { did -a telnet 7 $time * La connexion a échoué! }
  else {
    did -a telnet 7 $time * La connexion a réussi! 
    write telnet\ $+ $sockname $time * Connexion au serveur établie. 
    telnet reload 
  }
}
on *:sockread:telnet-*: {
  sockread %telnet | if (!%telnet) { return }
  if ($hget(telnet,current) == $sockname) { did -a telnet 7 $time * >> %telnet }
  write telnet\ $+ $sockname %telnet | unset %telnet
}
alias -l _r {
  if (!$1) { return } | if (%rand) { unset %rand }
  %r = 1 | while (%r <= $1) {
    %rr = $r(1,2) 
    if (%rr == 1) { %rand = %rand $+ $r(a,z) }
    else { %rand = %rand $+ $r(1,9) }
    inc %r
  } 
  .timer 1 1 unset %rand |  return %rand
}

A voir également

Ajouter un commentaire Commentaires
monsieur_canard Messages postés 22 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 30 octobre 2008
21 mai 2007 à 12:38
Merci ;-)

Je viens de remarquer (oui apres quelques jours, je sais, honte à moi etc ...) que j'ai oubilé d'intégrer un alias (hrem) ... donc voila, il se peut que vous ayez un message d'erreur du type: hrem : unknow command ...

Voila, je corrigerai ce problème en même temps que les améliorations données par ZeroOo
Seulement, je ne sais pas quand ;-) car j'ai pas mal de taff ces derniers temps...
ZeroOo Messages postés 24 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 21 avril 2009
19 mai 2007 à 22:47
Salut,

Assez bien réalisé sauf quelques petits trucs à corriger :

- utilise les variables locales (/var) plutôt que les globales (pour éviter les /unset)
- lorsque tu utilises un .timer, nomme-le (ex .timertelnet) pour éviter des conflits
- lors de ta boucle avec le $findfile, pas besoin de mettre *.* seul le "*" suffit

Sinon, bon travail !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (monsieur_canard)