Newsgroup: it.comp.software.newsreader
Titolo: [Hamster] - Esiste un comando da script per...

Premesso che ho spulciato l'help, con magri risultati; io e gli script
non andiamo molto d'accordo...
Dunque, vorrei creare uno script che, avviato alla partenza di H.,
faccia un HamFetchMail quando un pc della LAN scarica la posta da
hamster stesso... solo che non trovo nulla che mi pare usabile.
Idee?
Grazie.
Ciao, Alessio.
-- 
Il manuale di Agent: 
http://space.tin.it/cinema/claveron/alessio/index.htm
Le FAQ di ICSN: 
http://space.tin.it/cinema/claveron/alessio/FAQ-icsn.htm
Guida a FAgent: 
http://space.tin.it/cinema/claveron/alessio/FAgent/FA-man.htm

 
Non credo sia possibile (comunque aspetta che ti risponda Lem :-) ), si
potrebbe fare uno script che ogni tot minuti conti il numero dei messaggi
da distribuire (nelle directoty sotto mail) e se questo e' diminuito
rispetto al precedente controllo, avvia il processo di recupero posta. Il
problema pero' e che se qualcuno che non ha posta si collega, il numero
totale di messaggi rimane uguale ed il recupero posta non avviene. 
Puoi comunque con uno stratagemma  "forzare" hamster da rete ad eseguire
un HamFetchMail e poi dopo un qualche minuto  scaricarti la posta da
hamster. 
Io ho creato sotto la directory hamster, la directory "controllo".
Con uno script hamster ogni uno o due minuti controlla se in questa
directory vi sono dei file, se si, li cancella tutti ed avvia il recupero
posta. 
Dal lato client basta un semplice file bat con una sola riga che copia un
file qualsiasi (anche vuoto) nella directory "controllo" del server (che
deve essere accessibile in scrittura) 
Del file bat mi sono fatto collegamenti dappertutto, Desktop, menu start
... 
esempio del mio file Ricevi.bat:
copy mmm.txt \\P200\c\Programmi\hamster\controllo
lo script:
########################################################################
#!hs2
AtClear
AtAdd( controlla,"00:00","23:59","1111111",1,1 ) 
AtAdd( riceviInvia,"00:00","23:59","1111111",60,1 ) 
AtExecute
quit
########################################################################
########################################################################
sub controlla
if (FileExists (HamPath + "Mails\Mail.Out\*.msg") | FileExists (HamPath +
"controllo\*.*")) #su un'unica riga	
       cancellafile
	riceviInvia
endif
endsub
########################################################################
########################################################################
sub cancellafile
# nota: il FileDelete non accetta i caratteri jolly
   var($listaf,$i)
   $listaf= listalloc()
   ListFiles ($listaf, HamPath + "controllo\*.*")        
   $i = 0
   while ($i < ListCount ($listaf))
        FileDelete (HamPath + "controllo\" + ListGet ($listaf,$i))
    	inc ($i)
   endwhile
  listfree($listaf)
endsub
########################################################################
########################################################################
sub riceviInvia
########################################################################
Questa sub e' ricavata dallo Script  Demo-Session.hsc
e il compito e' di aprire una connessione, inviare tutta la posta e di
ricevere la nuova e di chiudere la connessione. 
endsub
########################################################################
In realta' lo script ogni ora in ogni caso riceve ed invia la posta
mentre ogni minuto controlla se c'e' posta in uscita o se qualcuno vuole
un HamFetchMail, se e' vera una delle due vengono cancellati tutti i file
dalla directory controllo (anche se non ce ne sono) ed avviato il
processo riceviInvia. 
ciao 
Sandro

hamster stesso... solo che non trovo nulla che mi pare usabile.
Ciao.
Se capisco bene, tu intendi costringere hamster a monitorare, istante 
per istante, il numero di connessioni al server locale pop3: ogni volta 
che il numero di connessioni aumenta, hamster dovrebbe fare un 
hamfetchmail. Così, chi si è connesso in quel momento, sa che, se ci 
riprova dopo qualche istante, non lascerà nulla di non letto neppure 
sui server remoti: insomma, sarà davvero aggiornato. Bell'idea. :)
Hamster può facilmente contare il numero di connessioni al pop3 locale: 
hamgetstatus(2,2) restituisce proprio questo numero. Il problema è far 
sì che il monitoraggio sia continuo (o quasi continuo). Le connessioni 
al pop3 locale sono, generalmente, molto brevi. Se 
chi si collega non ha mail da scaricare, già in locale, la 
disconnessione è quasi istantanea. Anche se imposti lo script perché 
giri e controlli ogni minuto, se non becca proprio il momento giusto, 
addio.
Si può provare con un loop, però, che controlli ogni pochi 
millisecondi. Con 100 sembra OK.
Prova a far partire Hamster con 'sto script:
#!hs2
Atclear
Atadd(postautomatica, "00:00", "23:59", "1111111", 0, true)
Atexecute
quit
sub postautomatica
	var($i,$oldstatus)
	$oldstatus=hamgetstatus(2,2)
	do
		if(hamgetstatus(2,2)>$oldstatus)
	     	$oldstatus=hamgetstatus(2,2)
			sincronizza
		else
			$oldstatus=hamgetstatus(2,2)		
		endif		
		sleep(100)
	loop
endsub 
sub sincronizza
	#hamfetchmail(...)... e quello che ti pare. :)
endsub
Oh, l'ho provato poco, eh!
Fammi sapere.
-- 
Bye.
       Lem
'CLOCK is what you make of it: non sprecare i cicli idle della tua CPU'
Per trovare una cura per il cancro:  
http://members.ud.com/vypc/cancer/

Fammi sapere.
Grazie ad entrambi, appena torno in ufficio a settembre mi applico
(stavo studiando durante le ferie) e riferisco.


	loop
Mi scuso per il pessimo esempio di programmazione. Per la serie: come 
chiamare tre volte una funzione, quando ne basterebbe una.
Naturalmente č piů snello cosě:
	do
		$i=hamgetstatus(2,2)
		if($i>$oldstatus)
	     	$oldstatus=$i
			sincronizza
		else
			$oldstatus=$i		
		endif		
		sleep(100)
	loop
Si noti che ho intenzionalmente costruito cosě il ciclo if. Se 
scrivessi:
		if($i>$oldstatus)
	     	sincronizza
		endif
		$oldstatus=$i
in caso di sincronizzazione, il valore di $oldstatus non sarebbe 
aggiornato tempestivamente.
