🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.tcl
5 messages
5 total messages Started by moozyk Mon, 13 Nov 2006 21:23
Tcl + ekg
#433
Author: moozyk
Date: Mon, 13 Nov 2006 21:23
26 lines
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
#434
Author: Googie
Date: Tue, 14 Nov 2006 00:02
38 lines
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
#435
Author: moozyk
Date: Tue, 14 Nov 2006 16:36
37 lines
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
#436
Author: Googie
Date: Wed, 15 Nov 2006 10:09
15 lines
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
#437
Author: moozyk
Date: Thu, 16 Nov 2006 17:27
10 lines
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