Tekil Mesaj gösterimi
Alt 22 Temmuz 2012, 23:07   #1
Çevrimdışı
Kafkef
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Services Yapısı ve Işleyişi




<Superdesk_ibRet> Merhaba arkadaşlar.
<Superdesk_ibRet> Kanal başlığında belirttiğimiz gibi, eğitim zamanı geldi.
<Superdesk_ibRet> Elimizden geldiğince, sizlerin belirttiğimiz konuda fikir sahibi olmanızı sağlayacağız.
<Superdesk_ibRet> Sözü fazla uzatmadan başlayalım.
<Superdesk_ibRet> -

<Superdesk_ibRet> Konu: Services Yapısı ve Işleyişi

<Superdesk_ibRet> Serviceslerin Yapısı;

<Superdesk_ibRet> Servisler Nedir?

<Superdesk_ibRet> Servisler standart kullanıcılarla benzer özellikler taşıyan fakat farklı bir kodlama yapısına sahip olan Client/Kullanıcı(lar) 'dır.
<Superdesk_ibRet> Hemen hemen bütün IRC kullanıcıları mIRC Scripting kullanmaktadır. Servisler için en kısa benzetmeyide buradan kurabiliriz.
<Superdesk_ibRet> Servisler kendilerine ait olan kod yapısı ile bağlantı kurar ve hareket ederler.
<Superdesk_ibRet> Standart kullanıcılar ise kendileri için kodlanmış olan programla bağlantı kurar ve programın izin verdiği şemada hareket ederler.

<Superdesk_ibRet> Farklılıkları;
<Superdesk_ibRet> 1- Kodlama yapısı
<Superdesk_ibRet> 2- Çalışma Prensibleri

<Superdesk_ibRet> Kodlama yapısı, genel olarak kullandığınız mIRC programlarından farklıdır.
<Superdesk_ibRet> Bir çoğumuz mIRC'a eklenen basit kodlar kullanmaktayız ve kodların çalışma mantıklarını az çok bilmekteyiz.
<Superdesk_ibRet> Servisleri kafanızda en iyi canlandıra bileceğiniz mantık da budur.
<Superdesk_ibRet> Belirlenen kodlar ve o kodların oluşturduğu döngüler sayesinde hareketini tamamlayan sistemlere servisler diyebiliriz.
<Superdesk_ibRet> Kodlama, C++ ile yapılmakta olup linux sistemine uyumlu şekilde düzenlenmektedir.

<Superdesk_ibRet> Çalışma mantığı, hedef ve tarama yapısı ile ilişkili olarak çalışmaktadır.
<Superdesk_ibRet> Hedef olarak bakacağımız kısım; irtibatı sağlayan kişidir.
<Superdesk_ibRet> Tarama ise; irtibat için gönderilen mesajlarda geçen içeriktir.
<Superdesk_ibRet> Her mesaj içeriğinde ayrı döngü şeması çalışmaktadır. Ilk döngü kayıtlı verilerin kontrolü için dönmektedir. Işleve göre farklılıklar gösterebilir fakat dil seçeneği bilgisi bu döngüde alınmaktadır.
<Superdesk_ibRet> Ikinci döngü tarama döngüsüdür ve mesaj içeriğinin uyuştuğu kelimeleri taramaktadır.

<Superdesk_ibRet> Bunu en basit şu şekilde izah edelim;
<Superdesk_ibRet> /Nickserv Help
<Superdesk_ibRet> Yukarıda yazan komutu uyguladığınız takdirde döngüler başlamaktadır. Ilk olarak çalışan döngü kayıtlı rumuza ait bilgileri incelemektedir.
<Superdesk_ibRet> Orneğin ; Bu rumuz kendisine hangi dil seçeneği ile cevap verilmesini istiyor?
<Superdesk_ibRet> Yani services bu kişi iletişim kurarken hangi dil seçenegini kullanacağını seçmektedir.
<Superdesk_ibRet> Diğer döngü ise komuttaki mesaj içeriği ile alakalıdır.

<Superdesk_ibRet> Örneğin;
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
static Command cmds[] = {
"HELP"do_helpNULL, -1, -1,-},
"REGISTER"do_registerNULLCHAN_HELP_REGISTER, -1,-}, 

<Superdesk_ibRet> Yukarıdaki satırlarda chanserv'e HELP ile başlayan ve REGISTER ile devam eden bir komut yollandığında yani;
<Superdesk_ibRet> /Chanserv HELP Register komutu uygulandığında chanservin kullanacağı LANG parçası gözükmektedir.
<Superdesk_ibRet> Az öncede söylediğim gibi ilk döngü dil seçeneğini buldu ve 2. döngü size size gönderlicek olan cevabı buldu.
<Superdesk_ibRet> Ileride yazağım örneklerle, daha iyi anlayacaksınız.

<Superdesk_ibRet> Şu şekilde sıralayalım;
<Superdesk_ibRet> 1. Döngü çalıştı ve taramasını yaptı
<Superdesk_ibRet> 2. Döngü 1. döngüden aldığı komut neticesinde mesajı inceleme başladı.
<Superdesk_ibRet> Daha sonra irtibatta kullanılacak olan ( CHAN_HELP_REGISTER ) içeriğini 1. döngüye aktararak kapandı.
<Superdesk_ibRet> 1. Döngü buradan aldığı bilgi neticesinde kendisinde bulunan bilgi ile gerekli LANG (Dil Dosyası) 'na bağlandı ve gerekli satırları size yansıtmış oldu.

<Superdesk_ibRet> LANG Dosyasında '' Chan_help_register '' kısmı görüntüsü;
<Superdesk_ibRet> CHAN_HELP_REGISTER
<Superdesk_ibRet> Kullanimi: REGISTER kanal sifre aciklama
<Superdesk_ibRet>
<Superdesk_ibRet> Bir kanali sizin adiniza kaydeder.Bu komutu kullanabilmek
<Superdesk_ibRet> icin sozkonusu kanalda operator olmaniz gerekir.Sifreniz
<Superdesk_ibRet> daha sonra IDENTIFY komutunu kullanarak kendinizi kanalin
<Superdesk_ibRet> Ayrıca bu tarz kodlamalarda dikkat çeken bir durum daha söz konusudur; %s ( Variables/Değişken )
<Superdesk_ibRet> IRCd sistemindeki değişkenler biraz farklı bir mantık ile çalışmaktadır. Şöyle ki;
<Superdesk_ibRet> Lang. dosyalarında bulunan bütün değişkenlerin adı %s veya %d olarak tanımlıdır.

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
NICK_LIST_HEADER
%'a uyan veriler:
NICK_LIST_RESULTS
liste sonu - %d/%d . 


<Superdesk_ibRet>
Yukarıdaki satırlar /Nickserv listemail email@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]ss komutu uygulandığında gelen sonuçların gösterimi için kullanılan lang satırlarıdır.
<Superdesk_ibRet> %s değişkeni bir çok farklı anlamda kullanılabiliyor.
<Superdesk_ibRet> Örneğin; Nickserv/Chanserv/Memoserv yerine %s yazılıp, servisler tarafından ortak olarak kullanılan lang satırlarında sadece %s değişkeni eklenerek hangi services üzerinden bu lang satırı istendi ise o servicesin adı eklene biliyor.

<Superdesk_ibRet> Yukarıdaki örneğimize devam edelim;
<Superdesk_ibRet> /Nickserv listemail
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


<Superdesk_ibRet> Komutuna aldığım cevap;
<Superdesk_ibRet> -NickServ-
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
'a uyan veriler:
<Superdesk_ibRet> -NickServ- KafKef
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

<Superdesk_ibRet> -NickServ- Slytherin
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

<Superdesk_ibRet> -NickServ- liste sonu - 2/2 .

<Superdesk_ibRet> Email adresini gösteren kısım lang dosyasında %s olarak kayıtlıdır.
<Superdesk_ibRet> Yani değişken olarak.
<Superdesk_ibRet> Sayısal verileri gösteren kısımlar ise %d olarak kayıtlıdır.
<Superdesk_ibRet> Not: %d değişkeni sadece rakamsal değerler için kullanılmaktadır.

<Superdesk_ibRet> Fakat;
<Superdesk_ibRet> %s değişkeni ise diğer bütün konularda kullanılan değişken görevini almaktadır.
<Superdesk_ibRet> Uygulanan komuta ve kodlamaya göre, %s değişkeninin verdiği cevap değişebiliyor. Yani sabit olarak bir veri aktarılmıyor.

<Superdesk_ibRet> Orneğin ; /Nickserv dropemail
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
komutu uygulandığı takdirde;

<Superdesk_ibRet> Kullanılan lang satırları;
<Superdesk_ibRet> NICK_DROPEMAIL_COUNT
<Superdesk_ibRet> Belirtilen maskeye uygun %d adet nick bulundu.
<Superdesk_ibRet> Silmek icin lütfen /msg %s DROPEMAIL-CONFIRM %s komutunu kullaniniz.

<Superdesk_ibRet> Komut uyuşması ;
<Superdesk_ibRet> notice_lang(s_NickServ, u, NICK_DROPEMAIL_COUNT, count, s_NickServ, mask);
<Superdesk_ibRet> Yukarıdaki notice_lang bu komutun döngüsünden alınmış cevap satırıdır.
<Superdesk_ibRet> Yani mesajın aktarılması için, uygun şartları oluşturan kodlama yapısından.
<Superdesk_ibRet> Komut cevabı;
<Superdesk_ibRet> -NickServ- Belirtilen maskeye uygun 2 adet nick bulundu.
<Superdesk_ibRet> -NickServ- Silmek icin lütfen /msg NickServ DROPEMAIL-CONFIRM
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
komutunu kullaniniz.

<Superdesk_ibRet> %d -> 2 adet.
<Superdesk_ibRet> %s -> Mail
<Superdesk_ibRet> Burada dikkat edilecek satır notice_lang yani size gelen cevap kullanımı.

<Superdesk_ibRet> Belirtilen maskeye uygun %d adet nick bulundu.
<Superdesk_ibRet> Belirtilen maskeye uygun 2 adet nick bulundu.
<Superdesk_ibRet> %d değişkeni yerini herzaman ki gibi rakamsal değere bıraktı.
<Superdesk_ibRet> Notice_lang satırındaki karşılı ise ; Count

<Superdesk_ibRet> /msg %s DROPEMAIL-CONFIRM %s
<Superdesk_ibRet> /msg NickServ DROPEMAIL-CONFIRM
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

<Superdesk_ibRet> + Yukarıda belirttiğimiz gibi, %s değişkeni uygulanan komuta göre veri aktarımı yapıyor.
<Superdesk_ibRet> Bu lang parçasında, bize mail kısmı olarak yansıtıldı.
<Superdesk_ibRet>
<Superdesk_ibRet> Burada ise ilk %s değişkeni nickserv olarak geldi karşımıza.
<Superdesk_ibRet> Diğer değişken ise email adresi olarak karşımızda.

<Superdesk_ibRet> Notice lang satırındaki karşılıklar ise;
<Superdesk_ibRet>
<Superdesk_ibRet> Nickserv ; s_NickServ
<Superdesk_ibRet> Email ; mask
<Superdesk_ibRet> Bilgi: Email'in mask olarak tanımlanmasıda; mask kullanılarak tarama yapılabilmesi açısından o şekilde düzenlenmiştir.
<Superdesk_ibRet>

<Superdesk_ibRet> Bir diğer konumuz ise CS MS NS vb. gibi servis isim kısaltmalarıdır.
<Superdesk_ibRet> Bugüne kadar, Helper arkadaşlarımıza komutlarda /cs /ns kullanmayalım dedik. Böyle bir servis yok dedik.
<Superdesk_ibRet> Evet böyle, bir servis yok ancak bu şekildede veri elde edebiliyotuz.
<Superdesk_ibRet> Bunun nedeni, unrealircd.conf'da tanımlanan alias.
<Superdesk_ibRet> Aslında bu gibi kısaltmalar geçmiş dönemlerde mIRC Scripting vb. programlara eklenen kodlar ile sağlanmaktaydı fakat bu olay okadar benimsendi ki IRCd sisteminde olması daha mantıklı hale geldi.
<Superdesk_ibRet> Sürekli /Cs /NS gibi kullanan komutlardan alınan hatalar neticesinde kullanıcılara kod vermek yerine unreal'in kendi sistemine eklemek daha pratik bir çözüm oldu.

<Superdesk_ibRet> IRCd Kodlama Yapısı;

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
alias "cs" {
format "^" {
nick "chanserv";
type services;
parameters "%1-";
};
type command;
}; 

<Superdesk_ibRet> Yukarıdaki kodlama yapısı Unrealircd.conf'un içerisinde herhangi bir satıra eklenmesi durumunda CS ile başlayan komutların sisteme Chanserv olarak iletilmesi sağlanmaktadır.
<Superdesk_ibRet> Isterseniz cs değilde ''MT'' kelimesini bile sisteme tanımlatabilir bu kelime ile Chanserv'a hitap edebilirsiniz.
<Superdesk_ibRet>
<Superdesk_ibRet> alias "MT" {
<Superdesk_ibRet> şeklinde sadece bu satırı değişmeniz yeterli olacaktır.
<Superdesk_ibRet> Bu kısmın daha iyi anlaşılması için birde Identify/Services/Register komutu için örnek verelim;
<Superdesk_ibRet>

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
alias identify {
format "^#" {
target chanserv;
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target nickserv;
type services;
parameters "IDENTIFY %1-";
};
type command;
};
                  
alias services {
format "^#" {
target chanserv;
type services;
parameters "%1-";
};
format "^[^#]" {
target nickserv;
type services;
parameters "%1-";
};
type command;
};

alias register {
format "^#" {
target chanserv;
type services;
parameters "REGISTER %1-";
};
format "^[^#]" {
target nickserv;
type services;
parameters "REGISTER %1-";
};
type command;
}; 


<Superdesk_ibRet>
Kodlama yapımız bu.
<Superdesk_ibRet> Şimdi açıklayarak algılamaya çalışalım.
<Superdesk_ibRet> Açıklama;
<Superdesk_ibRet> Alias identify -> Identify aliası oluşturuldu.
<Superdesk_ibRet> Format "^#" { -> Regex ifade yardımı ile format # ile başlıyorsa.
<Superdesk_ibRet> Target Chanserv; -> Chanserv servisi hedef alınır.
<Superdesk_ibRet> Type services; -> Tip services.
<Superdesk_ibRet> Parameters "IDENTIFY %1-"; -> Şartlar uyum sağladığında, /Identify #Kanal %1- komutu uygulanır.
<Superdesk_ibRet> %1- -> Manuel olarak işlev görecek olan kelime veya sonrası.
<Superdesk_ibRet> format "^[^#]" { -> Regex ifade yardımı ile, format # ile başlamıyorsa.
<Superdesk_ibRet> target nickserv; -> Nickserv servisi hedef alınır.
<Superdesk_ibRet> type services; -> Tip services.
<Superdesk_ibRet> parameters "IDENTIFY %1-"; -> Şartlar uyum sağladığında, /Identify %1- komutu uygulanır.
<Superdesk_ibRet> %1- -> Manuel olarak işlev görecek olan kelime veya sonrası.
<Superdesk_ibRet> type command; -> Alias Identify sona erdiğini belirtir. (Tip Komut)
<Superdesk_ibRet>

<Superdesk_ibRet> alias services { -> Services aliası oluşturuldu.
<Superdesk_ibRet> format "^#" { -> Format # ile başlıyorsa.
<Superdesk_ibRet> target chanserv; -> Chanserv servisi hedef alınır.
<Superdesk_ibRet> type services; -> Tip services.
<Superdesk_ibRet> parameters "%1-"; -> %1 veya sonrası işlev olarak alınır.
<Superdesk_ibRet> type command; -> Alias Services sona erdiğini belirtir. (Tip Komut)
<Superdesk_ibRet> * Burada services aliasının oluşturulma amacı, Nickserv ve Chanserv servislerini bu kısım içinde tanımlayabilmektir.
<Superdesk_ibRet> Orneğin; /Services identify Şifre yapıldığında, # komut içinde olmadığından dolayı Nickserv servisi esas alınacaktır.
<Superdesk_ibRet> -> format "^[^#]" {
<Superdesk_ibRet> target nickserv;
<Superdesk_ibRet>

<Superdesk_ibRet> Orneğin; /Services identify #Kanal Şifre yapıldığında, # formatı kullanıldığından dolayı, Chanserv servisi esas alınacaktır.
<Superdesk_ibRet> -> format "^#" {
<Superdesk_ibRet> target chanserv;
<Superdesk_ibRet>

<Superdesk_ibRet> alias register { -> Register aliası oluşturuldu.
<Superdesk_ibRet> format "^#" { -> Regex ifade yardımı ile Format # ile başlıyorsa.
<Superdesk_ibRet> target chanserv; -> Chanserv servisi hedef alınır.
<Superdesk_ibRet> type services; -> Tip services.
<Superdesk_ibRet> parameters "REGISTER %1-"; -> Şartlar uyum sağladığında, /Register #Kanal %1- komutu uygulanır.
<Superdesk_ibRet> format "^[^#]" { -> Regex ifade yardımı ile format # ile başlamıyorsa.
<Superdesk_ibRet> target nickserv; -> Nickserv servisi hedef alınır.
<Superdesk_ibRet> type services; -> Tip services.
<Superdesk_ibRet> parameters "REGISTER %1-"; -> Şartlar uyum sağladığında, /Register %1- komutu uygulanır.
<Superdesk_ibRet> type command; -> Alias register sonu. (Tip Komut)
<Superdesk_ibRet>

<Superdesk_ibRet> Notlar;
<Superdesk_ibRet> Lang dosyasının içinde yer alan servis mesajlarının kodlama yapısı, her servisin Main.c dosyası içinde yer almaktadır.
<Superdesk_ibRet>
<Superdesk_ibRet> Kodlamaya göre, uygulan komut analiz edilip buna uygun mesaj .conf dosyasının içinden çekilerek veri olarak status ekranına yansıtılır.
<Superdesk_ibRet> Ornek: ON *:Text:*:#HELP:{ IF $1 == .Selam { MSG $Chan Aselam. }
<Superdesk_ibRet> Help kanalında .Selam yazıldığında Aselam olarak cevap verilmesi sağlanır.

<Superdesk_ibRet> Ornek: Conf Mesajı -> NICK_IDENTIFY_FAILED -> Tanimlama basarisiz - Sifre gecersiz.

<Superdesk_ibRet> if (!nick_check_password(u, u->ni, pass, "IDENTIFY",
<Superdesk_ibRet> NICK_IDENTIFY_FAILED)) {
<Superdesk_ibRet> Şifre kontrolünde (Kod Yapısı) sorun çıkması halinde, .conf dosyasının içinden NICK_IDENTIFY_FAILED mesajı çekilerek status ekranına yansıtılır.

<Superdesk_ibRet> + /Nickserv veya diğer servisismi komutları uygulandığında, "No text to send" cevabı alınır. Bu bize komutun ardından veri belirtmemiz gerektiğini anlatır.
<Superdesk_ibRet> + Komut uygulamarında beliren mesajlar her zaman komutta belirtilen sıralamaya göre alınmaktadır.

<Superdesk_ibRet> Orneğin;
<Superdesk_ibRet> /Nickserv Yardım Commands
<Superdesk_ibRet> Veri: -NickServ- yardım diye bir komut yok. "/msg NickServ HELP" yaziniz.
<Superdesk_ibRet>

<Superdesk_ibRet> Açıklama: Yardım komutlarında her zaman servisisminden sonra, Help kullanılması zorunludur. 1 veride hata gerçekleştiği için doğru olan 2. veri (Commands) göz ardı edilerek;

<Superdesk_ibRet> UNKNOWN_COMMAND_HELP hata mesajı aktarıldı.
<Superdesk_ibRet>
<Superdesk_ibRet> /Nickserv Help Komut
<Superdesk_ibRet> Veri: -NickServ- komut hakkinda yardim bulunamadi.

<Superdesk_ibRet> Açıklama: 2. veri kontrol edilip doğrulandı, ancak 3. veride hata bulundu ve;
<Superdesk_ibRet> Kodlama yapısı ile NICK_HELP_COMMANDS listesi kontrol edildi ve NO_HELP_AVAILABLE hata mesajı belirtilerek komutun bulunamadığı belirtildi.
<Superdesk_ibRet>

<Superdesk_ibRet> Eğitim tamamlanmıştır.
<Superdesk_ibRet> Hazırladığımız bilgiler, hata payını ortadan kaldırmak için TR'nin en iyi IRCd coderlerinden olan @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] (Serkan) tarafından kontrol edilip onaylanmıştır.
<Superdesk_ibRet>

<Superdesk_ibRet> Dahada fazla detaya girerek IRCd kodlama yapısının tamamını açıklamalarla aktarabilirdik. Ancak sizleri fazla sıkmadan ve tadında bırakmak istediğimizden birkaç örnekle açıklamak istedik.
<Superdesk_ibRet> Umarım yapı ve işleyiş konusunda fikir sahibi olmuşsunuzdur.
<Superdesk_ibRet> Ramazan dolayısı ile doğal olarak yoğunluğumuz az oldu. Katılamayan arkadaşlar için, forumda paylaşılacaktır.
<Superdesk_ibRet> Hatamız olmuşsa, affola. Katılım gösteren tüm arkadaşlara mIRCTurk/Help olarak teşekkür ederiz.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet