IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  kral sohbet




14Beğeni(ler)
  • 9 Post By Kafkef
  • 2 Post By Diablo
  • 1 Post By RaskoInikov
  • 1 Post By UnyE
  • 1 Post By Sparrow

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 22 Temmuz 2012, 23:07   #1
Çevrimdışı
Services Yapısı ve Işleyişi


sohbet


<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.
<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
radyo44.com.tr
Alt 23 Temmuz 2012, 00:11   #2
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




güzel çalışma tebrikler ..

  Alıntı ile Cevapla

Alt 23 Temmuz 2012, 01:17   #3
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




güzel çalışma tebrikler ..

  Alıntı ile Cevapla

Alt 23 Temmuz 2012, 02:35   #4
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




Uzun zamandır bu kadar açıklayıcı ve öğretici bir eğitim dokümana denk gelmemiştim. Bu güzel çalışma için tebrikler @[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]. Senden buna benzer özel ve güzel çalışmaları bekliyorum. Başarılar.

  Alıntı ile Cevapla

Alt 23 Temmuz 2012, 14:01   #5
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




Eğitime katılamayanlar için paylaşılması güzel olmuş.

  Alıntı ile Cevapla

Alt 27 Temmuz 2012, 16:30   #6
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




elinize sağlık hocam.

  Alıntı ile Cevapla

Alt 23 Ocak 2013, 11:15   #7
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




Emeğine Sağlık Güzel Paylaşım Olmuş

__________________
Şimdi seni sevmek vardı ,Ama inan hiç öLecek haLim yok. !
  Alıntı ile Cevapla

Alt 17 Mayıs 2014, 18:08   #8
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




@[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] Emeğinize Sağlık.

__________________

Kullanıcı imzalarındaki bağlantı ve resimleri görebilmek için en az 20 mesaja sahip olmanız gerekir ya da üye girişi yapmanız gerekir.
  Alıntı ile Cevapla

Alt 23 Mayıs 2014, 18:35   #9
Çevrimdışı
Cevap: Services Yapısı ve Işleyişi




paylaşım için teşekkürler

  Alıntı ile Cevapla

Cevapla

Etiketler
işleyişi, services, ve, yapısı

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
C++ İf - Else Yapısı aSi C ve C++ 0 19 Mart 2012 19:30
Kuş Tüylerinin Yapısı KarakıZ Hayvanlar Alemi 0 27 Ocak 2012 11:51
Göz Ve Gözün Yapısı YapraK Ödev ve Tezler 0 29 Eylül 2009 04:47
Akciğerlerin Yapısı YapraK Biyoloji 0 30 Nisan 2009 05:03