Telnet dans un dialog

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

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)