Thread View: pl.comp.lang.tcl
5 messages
5 total messages
Started by moozyk
Mon, 13 Nov 2006 21:23
Tcl + ekg
Author: moozyk
Date: Mon, 13 Nov 2006 21:23
Date: Mon, 13 Nov 2006 21:23
26 lines
1733 bytes
1733 bytes
Witam
Jestem początkujący w tcl i mam pewien problem, chciałbym napisać skrypt
który będzie odpalany gdy ktoś napisze do mnie na GG (klient ekg) np: test.
Wszystko by było proste (np.: /on -a msg,chat * /exec -b %1 /home/abc/skrypt.
tcl %1 "%4") jednak ja chciałbym, żeby ten skrypt był cały czas włączony.
Będzie połączony z bazą danych, po ty by po każdym 'test' nie łączył się z nią
od nowa. Teraz pytanie, jak przesłać do takiego skryptu coś, i jak zrobić by
odpowiedź ze skryptu trafiała z powrotem do ekg? Da się w ogóle?
Aktualnie plik skrypt.tcl wygląda tak:
#!/usr/bin/tcl
if {[lindex $argv 1] == "test"} {
puts "Napisałeś test"
}
I działa w ten sposób, że gdy ktoś napisze do mnie test - ja mu odpiszę
'Napisałeś test'.
Jak go zmienić by był cały czas włączony (vwait forever?) no i jak przesyłać
do niego coś 'on msg,chat' ?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Tcl + ekg
Author: Googie
Date: Tue, 14 Nov 2006 00:02
Date: Tue, 14 Nov 2006 00:02
38 lines
2132 bytes
2132 bytes
moozyk wrote:
> Aktualnie plik skrypt.tcl wygląda tak:
>
> #!/usr/bin/tcl
>
> if {[lindex $argv 1] == "test"} {
> puts "Napisałeś test"
> }
>
> I działa w ten sposób, że gdy ktoś napisze do mnie test - ja mu
> odpiszę 'Napisałeś test'.
>
> Jak go zmienić by był cały czas włączony (vwait forever?) no i jak
> przesyłać do niego coś 'on msg,chat' ?
>
Jako że EKG nie obsługuje "natywnie" Tcl'a, czyli nie linkuje się z
biblioteką Tcl, a trzeba go wywoływać za każdym razem, to musisz
podzielić swój skrypt na 2 części:
1. Skrypt właściwy, działający w trybie demona (ze wspomnianym vwait
forever), który będzie wykonywał wszystkie niezbędne czynności
związane z bazą danych, itd. Będzie też nasłuchiwał na jednym porcie
nadchodzących połączeń ([socket -server])
2. Skrypt narzędziowy - wywoływany przez ekg w zdarzeniach on
msg,chat - ten skrypt będzie przyjmował polecenie w $argv, a następnie
łączył się ze skryptem z 1 pkt. i wywoływał odpowiednie w nim
polecenia.
Niestety - jak widać - sprawa nieco się komplikuje, ale nie wiele da
się na to poradzić. Aby wygodnie takie rzeczy pisać, Tcl musiałby być
wpełni obsłużony przez samo ekg, a nie jako dowolne wywołanie powłoki.
--
Pozdrawiam (Regards)!
Googie
Re: Tcl + ekg
Author: moozyk
Date: Tue, 14 Nov 2006 16:36
Date: Tue, 14 Nov 2006 16:36
37 lines
1836 bytes
1836 bytes
Googie <googie@nospam.0rg> napisał(a):
> [...]
Witam, dzięki za szybką odpowiedź. Rozwiązanie idealne (że sam na nie nie
wpadłem!), jednak mam jeszcze pewien problem.
Mam plik odpalany przez ekg:
#!/usr/local/bin/tclsh8.4
if {![catch {socket localhost 45280} sock]} {
set line [gets $sock]
puts $line ;# Ta linia miałaby być wysłana pod numerek który do mnie napisał
} else {
puts "Błąd. Nie mogę połączyć się z bazą danych."
}
I plik który jest cały czas odpalony:
#!/usr/local/bin/tclsh8.4
socket -server slucham 45280
proc slucham {kanal h p} {
puts $kanal "No witaj!:)"
}
vwait forever
Jednak ekg nie odpisuje.. Mógłbym to łatwo rozwiązać, zamiast puts $kanal "No
witaj.." dać: exec echo "/msg $uin No witaj!:)" > ~/.gg/pipe ale chciałbym
zrozumieć jak działa dokładnie to puts, a może nie da się tak by ekg odpisało
do tego co coś napisze?:>
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Tcl + ekg
Author: Googie
Date: Wed, 15 Nov 2006 10:09
Date: Wed, 15 Nov 2006 10:09
15 lines
1221 bytes
1221 bytes
moozyk wrote: > [...] Wszystko jest ok, tylko kanały tworzone przez sockety mają domyślnie ustawione dość spore buforowanie. Więc jeśli chcesz natychmiast wysłać pojedyńczą linię, to masz 2 wyjścia: 1. Wywoływać: flush $kanal zaraz po puts. 2. Przed puts wywołać: fconfigure $kanal -buffering line -- Pozdrawiam! (Regards!) Googie
Re: Tcl + ekg
Author: moozyk
Date: Thu, 16 Nov 2006 17:27
Date: Thu, 16 Nov 2006 17:27
10 lines
1042 bytes
1042 bytes
Googie <no@spam.0rg> napisał(a): > [...] Działa! Jeszcze raz dziękuję. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads