Telnet dans un dialog

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 804 fois - Téléchargée 17 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

Messages postés
22
Date d'inscription
vendredi 11 août 2006
Statut
Membre
Dernière intervention
30 octobre 2008

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...
Messages postés
24
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
21 avril 2009

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)