Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Bug bizarre : Namespace, array et socket
#1
Bonjour ici.

Je tente de faire un système qui connectera un pseudo-bot via un socket. Sauf que j'ai un bug vraiment étrange avec la variable de configuration:

tcl
namespace eval sockegg {
 
	set egg(clone1) {
		nick "clone1"
		realname "I am a clone"
		identd "bwaaa"
		serv	"irc.zeolia.net"
		port	6667
		host	"I.am.a.clone"
		idx	0
	}
 
	variable bot
 
	bind dcc - "clone" [namespace current]::come
	proc come { i f a } {
		[namespace current]::connect clone1 $a
	}
 
	proc connect {nick chan} {
		array set ::sockegg::bot $::sockegg::egg($nick)
		putlog "Going to $::sockegg::bot(serv)"
		set mserver $::sockegg::bot(serv)
		set mport $::sockegg::bot(port)
		putlog "Connection to $mserver $mport"
		set ::sockegg::bot(idx) [connect $mserver $mport]
		control $::sockegg::bot(idx) $chan
		putdcc $::sockegg::bot(idx) "USER $::sockegg::bot(nick) 0 0 :$::sockegg::bot(realname)"
		putdcc $::sockegg::bot(idx) "NICK $::sockegg::bot(nick)"
	}
 
	bind dcc - "unclone" [namespace current]::go
	proc go {i f a} {
		array set ::sockegg::bot $::sockegg::egg($nick)
		killdcc $::sockegg::bot(idx)
		set ::sockegg::bot(idx) 0
	}
}


Voici l'erreur:
Quote:.clone #test
[15:46:56] Going to irc.zeolia.net
[15:46:56] Connection to irc.zeolia.net 6667
[15:46:56] Tcl error [::sockegg::come]: can't read "::sockegg::egg(irc.zeolia.net)": no such element in array
.set errorInfo
[15:47:12] tcl: builtin dcc call: *dcc:set CrazyCat 24 errorInfo
[15:47:12] #CrazyCat# set errorInfo
Currently: can't read "::sockegg::egg(irc.zeolia.net)": no such element in array
Currently: while executing
Currently: "array set ::sockegg::bot $::sockegg::egg($nick)"
Currently: (procedure "connect" line 2)
Currently: invoked from within
Currently: "connect $mserver $mport"
Currently: (procedure "::sockegg::connect" line 7)
Currently: invoked from within
Currently: "[namespace current]::connect clone1 $a"
Currently: (procedure "::sockegg::come" line 2)
Currently: invoked from within
Currently: "::sockegg::come $_dcc1 $_dcc2 $_dcc3"
Donc, d'où me sort-il ce ::sockegg::egg(irc.zeolia.net) ?
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
#2
salut,

pourquoi utilises-tu le chemin complet vers la variable alors que tu es déjà dans le namespace?


tcl
proc connect {nick chan} {
      variable egg
      variable bot
      array set bot $egg($nick)
      putlog "Going to $bot(serv)"
      set mserver $bot(serv)
      set mport $bot(port)
      putlog "Connection to $mserver $mport"
      set bot(idx) [connect $mserver $mport]
      control $bot(idx) $chan
      putdcc $bot(idx) "USER $bot(nick) 0 0 :$bot(realname)"
      putdcc $bot(idx) "NICK $bot(nick)"
   }


ensuite pour l erreur en elle même, c'est normal, tu reprends comme nom de procédure "connect" je penses que ça doit entrer en conflit.
Quote:Currently: (procedure "connect" line 2)
Currently: invoked from within
Currently: "connect $mserver $mport"
tu le renvois en boucle sur la procédure connect de ton namespace avec comme argument "irc.zeolia.net" "6667"
essais comme ça:

tcl
set bot(idx) [::connect $mserver $mport]

pour utiliser la procédure connect classique.
tcl cherche d'abord dans le namespace ou il se trouves
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#3
djkenny Wrote:ensuite pour l erreur en elle même, c'est normal, tu reprends comme nom de procédure "connect" je penses que ça doit entrer en conflit.
Quote:Currently: (procedure "connect" line 2)
Currently: invoked from within
Currently: "connect $mserver $mport"
tu le renvois en boucle sur la procédure connect de ton namespace avec comme argument "irc.zeolia.net" "6667"
essais comme ça:

tcl
set bot(idx) [::connect $mserver $mport]

pour utiliser la procédure connect classique.
tcl cherche d'abord dans le namespace ou il se trouves
Ph la buse ! Merci djkenny, je suis vraiment stupide !
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
#4
stupide non, c'est une faute d'inattention (que j'ai déjà commise surtout avec "connect" et "join")
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  Erreur socket limit Amand 4 233 18/06/2022, 15:37
Last Post: Amand
  [Script] "::http::register https 443 ::tls::socket" Kossiwa 12 4,227 07/06/2020, 18:55
Last Post: DaDIsS
  [Demande] Appel d'une variable dun namespace à un autre ? aliasangelius 2 2,968 16/01/2017, 15:00
Last Post: aliasangelius
  [Bug] script bot socket athor69 0 3,105 31/01/2016, 17:51
Last Post: athor69
  Codage TCL - Socket incorporé KeeViiNou 15 10,105 21/03/2014, 11:46
Last Post: KeeViiNou
  Probleme namespace, variable, proc ZarTek 3 4,456 03/08/2013, 21:10
Last Post: CrazyCat
  Socket TCL tow 1 4,388 24/11/2012, 08:34
Last Post: Artix
  Socket Obu 4 5,112 27/02/2011, 03:37
Last Post: Obu
  Plusieurs connections simultanémment sur une socket. jolo2 1 4,122 23/04/2010, 23:54
Last Post: Marc
  Pb d'import/export avec les namespace mika23 5 4,448 03/02/2010, 10:48
Last Post: mika23

Forum Jump:


Users browsing this thread: 1 Guest(s)