Disajikan dalam sekejap

printf “Kesalahan %d: %s

Disajikan dalam sekejap

“, $kesalahan, $deskripsi ;

mati “$deskripsi

” jika ($fatal) ;

}

Ini ditulis dengan gaya Perl yang lebih klasik – perhatikan bagaimana kami tidak menggunakan tanda kurung di fungsi printf dan die. Kita perlu menambahkan ini sebagai fungsi panggilan balik baru setelah panggilan balik pertama, jadi:

$oscar->set_callback_error(\&handle_error); Now when you run the program with an incorrect password you'll see: login: Connecting to login.oscar.aol.com: 5190. login: Connected. login: Connected to login server. login: Sending password. Error 0: Invalid password. Invalid password. 

Memperluas server

Sekarang kita akan melihat dua ekstensi pada server ini: metode dimana orang dapat mendaftar untuk menerima pesan, dan metode yang dapat digunakan program lain untuk mengirim pesan. Tujuan kami adalah membuat server tempat orang mendaftar dan kemudian menerima informasi dari program lain seperti pemantau kesalahan. Kami telah menerapkan pendaftaran menggunakan daftar teman, sebuah fasilitas AIM yang memungkinkan setiap pengguna mengetahui siapa temannya dan membaginya ke dalam beberapa kelompok. Informasi sobat disimpan di server AIM, jadi kami tidak perlu menyimpan informasi apa pun secara lokal. Untuk mengimplementasikan daftar teman, tambahkan kode berikut:

use constant BUDDYGROUP => 'pcpro'; sub im_in { my($oscar, $sender, $message, $is_away) = @_; print "[AWAY] " if $is_away; print "$sender: $message "; if ($message =~ /join\s+${\BUDDYGROUP}/i) { $oscar->add_buddy(BUDDYGROUP, $sender); $oscar->commit_buddylist(); $oscar->send_im($sender, "$sender: added to buddy group ${\BUDDYGROUP}"); } elsif ($message =~ /remove\s+${\BUDDYGROUP}/i) { $oscar->remove_buddy(BUDDYGROUP, $sender); $oscar->commit_buddylist(); $oscar->send_im($sender, "$sender: removed from buddy group ${\BUDDYGROUP}"); } elsif ($message =~ /members\s+${\BUDDYGROUP}/i) { my $outgoing = sprintf "Group %s members: %s", BUDDYGROUP, join(',',$oscar->buddies(BUDDYGROUP)); $oscar->send_im($sender, $outgoing); } } 

Apa yang kami lakukan di sini adalah menyiapkan konstanta untuk nama grup kami “pcpro”, lalu menggunakannya dalam versi baru dari fungsi pesan masuk kami im_in yang sekarang memeriksa pesan masuk dan memutuskan apa yang akan dilakukan Mengerjakan. Jika menerima “gabung dengan pcpro”, ia menambahkan pengguna ini ke daftar teman, sementara “hapus pcpro” menghapusnya dari daftar. Jika menerima pesan “anggota pcpro”, ia akan mengirimkan kepada pengguna daftar semua anggota grup teman. Semua pesan ini ditangani dengan cara yang sama, dengan mencocokkannya dengan ekspresi reguler, di baris:

if ($pesan =~ /join\s+${\BUDDYGROUP}/i) {

yang berarti “jika pesan yang diterima ($message) cocok dengan (=~) ekspresi reguler yang dimulai dengan kata “join” diikuti dengan sejumlah spasi (\s+) dan nama grup sobat, lalu lakukan langkah berikutnya penyataan". Ekspresi reguler adalah bagian yang diapit oleh garis miring, dan “I” di akhir berarti mengabaikan huruf besar/kecil sehingga program menangani “Join PCPro” sama seperti “join pcpro”. Ada beberapa Perl yang rumit di sini, karena menggunakan konstanta BUDDYGROUP di dalam ekspresi reguler memerlukan pengetahuan tingkat lanjut tentang referensi.

Sekarang daftar teman kita sudah siap, kita harus memutuskan bagaimana cara mengirim pesan-pesan itu. Ada banyak metode untuk memasukkan pesan ke dalam program Perl (lihat halaman manual perlipc untuk contohnya) tetapi kita akan menggunakan soket TCP/IP. Tambahkan baris berikut ke program setelah pernyataan “use” lainnya: