XcLusive | 28 Temmuz 2007 04:38 | Yanıt: Basit Otomatik Güncelleştirme update sistemi yapabilirsiniz webden dosyalari alarak ve dosya boyutunu yuklu olan dosya ile karsilastirip eger dosya boyutlari degisikse guncelleyebilirsiniz.. hersey mantiga ve biraz olsun bilgiye bakar kendi script'imden birkac alinti yapacagim.. Kod:
alias su { if ($sock(update,0) == 1) { sockclose update } | sockopen update [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] 80 }
;</su komutu ile sock'u siteye bağladık>
;<remote bölümü sock bağlanıp siteden dosya.txt dosyasını okuyacak..>
on 1:sockopen:update:{
if ($sockerr) { echo $color(info) -at Sock Bağlanamıyor Lütfen Tekrar Deneyin | halt }
echo -a Update Kontrol Ediliyor..
.sockwrite -n update GET /dosya.txt HTTP/1.1
.sockwrite -n update Host: update.site.com
.sockwrite -n update $clrf
}
;<dosya.txt dosyasının içinde olanlar
dosya script.ini
the end
<fazladan the end yazısını ekledim bu sockta hata vermemesi içindi.>
on 1:sockread:update:{
sockread %temp
if (content-length isin %temp) { set %dosyab $remove($gettok(%temp,2,58),$chr(32)) }
updates %temp
}
;<sock botumuz sitemize bağlanıp dosya boyutunu alıyor ve /updates komutunu uyguluyor>
;</updates komutu işlevleri>
alias updates {
if $1 != dosya { goto end } ;< 1. kelime dosya değilse :end satirina git
aspas $2- ;< aspas komutunu uygula 2. kelimeyi kullanarak
set %aspas x ;<aspas değerini x yap>
:end
if $1 == yok { echo -a Güncellenecek Dosya Yok.. } <;1. kelime yok ise güncellemeyi yok yap.>
if $1 == the && $2 == end { echo -a Dosya Bilgisi Alındı.. } <;söylememe gerek yok sanırım :)>
}
alias x writeini $mircdir\xclusive.ini $1- <ini dosyasına yazdırmak için..>
x3 return $readini(xclusive.ini,$1,$2-) <ini dosyasını okutmak için>
;<aspas komutunun görevleri>
alias aspas {
var %asfa dat $+ $rand(111,999) ;<%asfa değerini 111,999 arasi olustur dat567 gibi. bu siteye socku baglayip dosyayi indirmek icin>
sockopen %asfa update.ahkalbim.net 80 <bagla>
$x(sock, $+ %asfa $+ ,$1-) <ini dosyasına yazdırmak için..>
$x(update, $+ %asfa $+ ,$1-) <ini dosyasına yazdırmak için..>
}
-----------
<dat adindaki sock botumuz baglandiginda yapacagi islevler>
on 1:sockopen:dat*:{
if ($sockerr) { echo $color(info) -at Sock Bağlanamıyor Lütfen Tekrar Deneyin | halt }
sockwrite -n $sockname GET / $+ $x3(sock, $+ $sockname $+ ) HTTP/1.1 <ini dosyasından sock botumuzun adını kullanarak hangi dosyayı indireceğini belirliyoruz>
sockwrite -n $sockname Connection: keep-alive
sockwrite -n $sockname Host: %d.host
sockwrite $sockname $crlf
}
<dat* isimli sock botumuzu okutuyoruz>
on 1:sockread:dat*:{
sockread %sas
if (content-length isin %sas) { set %fsiz $remove($gettok(%sas,2,58),$chr(32)) | dsy $x3(sock, $+ $sockname $+ ) | $x4(sock, $+ $sockname $+ ) }
}
<ilk olarak dosya boyutunu alıyoruz %fsiz değeri..2. olarak dsy komutunu uyguluyoruz $x4 değeri ile ini dosyamızdan siliyoruz>
x4 remini $mircdir\xclusive.ini $1- < $x4 değeri.
;<dsy komutu>
alias dsy {
var %fs $findfile($mircdir, $+ $1 $+ ,0)
var %fx 1
while (%fx <= %fs) {
if $file($findfile($mircdir, $+ $1 $+ ,%fx)).size != %fsiz {
<yukardaki komut satırı ile bilgisayarımıza yüklü dosya boyutuna baktırdık eğer dosya boyutları farklı ise dosyamızı bilgisayarımıza yükleyeceğiz
if ($sock(rep,0) == 0) { dsydevam } <dosya yüklemesinin devamı>
}
inc %fx
}
}
<dosya yüklemesinin devamı /dsydevam>
alias dsydevam {
var %baydi $ini(xclusive.ini,update,0)
var %baydi2 $ini(xclusive.ini,update,1)
if %baydi == 0 { echo -a Güncelleme Tamamlandi | goto end }
var %okuini $readini(xclusive.ini,update, $+ %baydi2 $+ )
$x4(update, $+ %baydi2 $+ )
dl [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] $+ %okuini < dosyayı yükletiyoruz /dl komutu ile>
echo -a %okuini Dosyası Yükleniyor... <bilgi beriyoruz>
:end
}
<dosya yükletme komutu /dl>
alias dl {
set %d.path $remove($1,%d.host,[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]))
if ($exists($mircdir $+ /update/ $+ $gettok(%d.path,$numtok(%d.path,47),47))) {
set %hmm $input($gettok(%d.path,$numtok(%d.path,47),47) Bu Dosya Daha Önceden Yüklenmiş $+ $chr(44) $crlf $+ Tekrar Yüklemek İstiyormusunuz?,y)
if (%hmm == $true) { .remove $mircdir $+ update/ $+ $gettok(%d.path,$numtok(%d.path,47),47) | goto start }
else { halt }
}
:start
set %time.total $ctime
if (http:// isin $1) { set %d.host $gettok($1,2,47) }
else { set %d.host $gettok($1,1,47) }
set %d.path $remove($1,%d.host,[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]))
sockopen rep $remove(%d.host,[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]) 80
:end
}
<dosyayı script'e yükledik..>
peki yükledikten sonra nasıl güncelleme yaparız?
/yukle dosyaadi.uzanti
alias yukle {
var %gnc $1
var %gnca $mircdirupdate\ $+ %gnc <scriptimizin içinde update klasörünün içindeki dosyayı alıyoruz>
var %gncd $findfile($mircdir, $+ %gnc $+ ,0) <aynı dosya adında başka bir dosya varmı aratıyoruz varsa bulunduğu klasörün adını alıyoruz>
var %gncs 1
while (%gncs <= %gncd) {
var %gncx $findfile($mircdir, $+ %gnc $+ , $+ %gncs $+ ) <tekrar dosyayı aratıyoruz>
if (update !isin %gncx) { <klasörün adı update değilde bu komut olmasa çakışma olabilri>
var %klasor $remove(%gncx, $+ %gnc $+ )
.copy -o %gnca %klasor <dosyayı gönderiyoruz -o komut satırı var olan dosyayı değiştirmek için>
echo -a %gnc Dosyası Başarıyla Script'e Kopyalandı
}
inc %gncs 1
if %gncs > %gncd { .remove %gnca } <yüklenen dosyayı update klasöründen sildiriyoruz>
}
}
<dl komutu rep adinda sock botu baglar rep adindaki sock botunun kodlari>
on *:SOCKREAD:rep: {
if (%d.check == 0) {
sockread %dat
if (*HTTP/* 404 Not Found* iswm %dat) { sockclose rep | echo -a HATA: Dosya Bulunamadi Sock Kapatildi | remini xclusive.ini update | remini xclusive.ini | halt }
if (content-length isin %dat) { set %fsize $remove($gettok(%dat,2,58),$chr(32)) }
if ($len(%dat) < 4) {
set %d.check 1
}
}
elseif (%d.check == 1) {
sockread &tmp
set %read $calc(%read + $sockbr)
set %rt $calc(%rt + $sockbr)
set %percents $int($calc(%read / %fsize * 100))
bwrite $mircdir $+ update/ $+ $gettok(%d.path,$numtok(%d.path,47),47) -1 &tmp
if (%read == %fsize) {
echo -a $gettok(%d.path,$numtok(%d.path,47),47) Dosyası Başarıyla Yüklendi
sockclose rep }
}
}
} bu benim scriptten aldığım ve tamamiyle kendi yazdığım kodlar arkadaşlar burda size nasıl bir update sistemi yapabileceğinizi anlattım basit ufak birşey kodlar ne kadar çalışır ne kadar çalışmaz bilemem saat gecenin 4.5 uykusuz bir şekilde yazdım sizlere anlatmak istedim hatalardan dolayı kusura bakmayın :) amacım sizlere bu işin mantığını vermek nasıl olabilir? sorusunu kafanızdan kaldırmanız.eğer size bir yol gösterebilmiş isem ne mutlu bana iyi çalışmalar dilerim bu kodu derli toplu bir şekilde gösterdim isteyen arkadaşlar olursa scriptteki kodu olduğu gibi buraya alabilirim yeterki siz öğrenmek ve birşeyler yapmak isteyin.. |