3
BAB III ANALISIS DAN PERANCANGAN Pada bab ini akan dijelaskan mengenai analisis dan perancangan library Yahoo! Messenger pada platform Android. Analisis ini meliputi deskripsi umum dari sistem, arsitektur perangkat lunak.
3.1 Arsitektur Perangkat lunak
Gambar 3.1: Arsitekt u r p e r a ngka t lu na k
Perangkat lunak yang akan dibangun merupakan suatu library yang berisi berbagai macam fungsi yang diperlukan untuk berkomunikasi dengan server Yahoo! Messenger. Library ini akan diberi nama AYmsg. Library ini akan dikumpulkan dalam bentuk package sehingga programmer dapat dengan mudah memanfaatkan library ini untuk membuat suatu Yahoo! Messenger client pada platform Android. Library ini akan menggunakan protokol TCP/IP untuk mengirimkan paket data ke server Yahoo! dengan alamat scs.msg.yahoo.com port 5050. Perangkat lunak ini terhubung ke internet melalui fasilitas komunikasi data yang telah disediakan oleh perangkat keras. Fasilitas tersebut dapat berupa GPRS, 3G, Ethernet, WiFi dan sebagainya. Perangkat lunak yang akan dibangun akan memanfaatkan library yang ,,, 1
,,, 2 telah disediakan oleh platform untuk mengirimkan paket-paket TCP/IP. Sehingga tidak peduli jenis komunikasi yang digunakan, aplikasi ini tetap menggunakan cara yang sama untuk mengirimkan data ke server.
Library tersebut nantinya akan
meminta user untuk memilih jenis koneksi yang ingin digunakan. Secara umum, arsitektur perangkat lunak yang akan dibangun dapat dilihat pada Gambar 3.1. Secara lebih mendetail arsitektur library yang akan dibuat dipisahkan menjadi dua bagian. Seperti yang dapat dilihat pada Gambar 3.2. Bagian tersebut terdiri dari: �
Client Side Library. Merupakan bagian library yang langsung digunakan oleh pengembang. Bagian library ini berisi fungsi-fungsi untuk berkomunikasi dengan Service yang merupakan layer di bawahnya.
�
Service Side Library. Service side library merupakan bagian background dari library ini yang bertindak sebagai inti library yang membuka koneksi dan berkomunikasi dengan server Yahoo! Messenger. Nama service dipilih karena kelas utama dari library merupakan jenis building-block tipe Service.
Gambar 3.2: Arsitekt u r layer library AYMsg
Gambar 3.2 Menunjukkan layer dari library yang akan di bangun. Layer paling bawah adalah service, layer ini berkomunikasi dengan sistem dan paling atas adalah client library yang secara langsung digunakan oleh user.
,,, 3
3.2 Analisis Implementasi Library pada Android Pada bagian ini akan dijelaskan bagaimana implementasi library yang akan dibangun pada platform Android.
3.2.1 Service Pada sub bab 2.1.2 telah dijelaskan bagaimana Building Block aplikasi terbagi menjadi 4 bagian. Activity, Intent Receiver, Service dan Content Provider. Masing-masing blok tersebut memiliki karakteristik dan life-cycle yang berbeda-beda. Untuk keperluan Tugas Akhir ini, library akan memanfaatkan building block Service. Service dipilih karena memiliki life-span yang paling lama. Proses Service akan berjalan terus pada background meskipun aplikasi yang menghidupkan atau memanggilnya berada di background. Kehidupan service yang terus-menerus diperlukan untuk menjaga koneksi ke server Yahoo!. Apabila library memanfaatkan Activity sebagai komponen untuk membentuk koneksi ke server Yahoo!, maka pada saat aplikasi berada di background koneksi akan terputus. Service pada Android memang dibuat untuk mengakomodasi fungsi-fungsi yang terus berjalan tetapi wujudnya tidak perlu selalu dilihat oleh user aplikasi. Komponen Service yang digunakan hanya semata-mata untuk melayani koneksi ke server saja. Service tidak bisa memiliki tampilan ke user. Untuk membuat tampilan yang berinteraksi dengan server maka dibutuhkan kelas Activity. Kelas Activity merupakan interface dimana user dapat berinteraksi dengan sistem. Aplikasi yang memanfaatkan library ini nantinya akan mengimplementasi Activity sebagai interface dan library AYmsg yang nantinya akan mengurus komunikasi dengan kelas Service sebagai penyedia koneksi. Namun terdapat kekurangan dalam menggunakan kelas Service. Tidak seperti
,,, 4 pemrograman Java pada umumnya, biasanya suatu aplikasi berjalan dalam satu proses saja kecuali program tersebut memang menciptakan proses baru. Service pada Android dapat berjalan pada proses yang berbeda sehingga pemanggilan method dari kelas lain yang biasanya dapat langsung dilakukan, sekarang harus melalui IPC (Inter Process Communication). Pemrograman IPC memiliki tingkat kesulitan yang lebih tinggi dibanding dengan pemrograman biasa. Untuk menyederhanakan pemrograman IPC tersebut, Android memiliki metode yang disebut dengan AIDL (Android Interface Definition Language). Dengan metode ini kita membuat kelas seperti layaknya kelas seperti biasa lalu SDK Android akan menerjemahkan kelas tersebut menjadi kelas yang menggunakan IPC. Meskipun pemrograman IPC pada Android telah dimudahkan oleh AIDL, tetapi metode ini masih memiliki beberapa kekurangan. Parameter fungsi yang dibuat dalam AIDL masih terbatas pada : �
Tipe primitif java seperti int, boolean dll.
�
Kelas-kelas berikut: �
String.
�
List. Elemen pada list harus berupa tipe dalam daftar ini.
�
Map. Saat ini hanya didukung map dengan tipe generik saja.
�
CharSequence. Kelas yang digunakan pada TextView di Android.
�
Interface AIDL lain yang telah dihasilkan oleh SDK.
�
Kelas kostumisasi yang di kembangkan oleh pengembang tetapi harus melakukan implement Parcelable protocol. Kelas ini nantinya akan di passing by value bukan by reference.
,,, 5
3.2.2 Penggunaan Callback Dalam pemisahan antara Service dengan Activity, perlu adanya suatu metode untuk memberitahukan user tentang event yang terjadi. Semua pesan dari server pertama kali selalu diterima oleh bagian Service. Pesan itu lalu di parsing dan dikirimkan kembali ke sisi user library melalui fungsi yang telah dibuat menggunakan AIDL. Pesan yang di parsing akan menghasilkan pasang key dan value. Informasi key dan value tersebut lalu dikirimkan ke sisi client untuk diolah. Alasan bahwa pasangan key dan value tersebut tidak diolah di sisi Service adalah keterbatasan parameter yang dapat dikirimkan melalui AIDL. Oleh karena itu, informasi key dan value tersebut diolah di sisi library bagian client. Setelah diolah, library harus memberitahukan user tentang event yang terjadi dan memanggil fungsi yang sesuai untuk menangani fungsi tersebut. Fungsi-fungsi tersebut adalah fungsi callback. Fungsi callback ini dapat diimplementasi oleh user library dan akan dieksekusi oleh library pada event tertentu. 3.2.2.1 Fungsi Synchronous dan Asynchronous.
Semua fungsi yang tidak membutuhkan respon dari server Yahoo! Messenger bersifat synchronous atau blocking. Contoh fungsi ini antara lain adalah fungsi untuk mengirimkan pesan dan fungsi untuk mengubah status. Fungsi tersebut akan bersifat blocking sampai paket berisi pesan tersebut berhasil dikirimkan. Tidak bersifat blocking sampai pesan tersebut diterima oleh user tujuan. Hal ini karena dalam protokol Yahoo! Messenger sendiri tidak ada mekanisme paket Acknowledgment bahwa paket pesan tersebut sudah diterima oleh pengirim. Fungsi-fungsi lain kebanyakan bersifat Asynchronous atau tidak bersifat blocking. Salah satu contoh adalah fungsi untuk login. Dari sisi client side library. Fungsi
,,, 6 tersebut akan meminta server untuk melakukan proses otentikasi, tetapi fungsi tersebut tidak mengembalikan nilai apakah proses otentikasi tersebut telah berhasil atau tidak. Yang dilakukan oleh sisi service adalah melanjutkan proses otentikasi dan memanggil fungsi callback secara asynchronous yang bersesuaian dengan hasil proses otentikasi. Misalkan proses otentikasi berhasil library akan memanggil fungsi callback onLoginSucceded() dan bila gagal, library akan memanggil fungsi callback onLoginFailed(). Method Asynchronous dipilih karena beberapa alasan: �
Keterbatasan platform Android. Android diciptakan sebagai platform yang sangat responsif. Setiap aplikasi dimonitor oleh Activiy Manager dan Window Manager System Services. Android akan memunculkan pesan ANR (Application Not Responding) Gambar 3.3, apabila terjadi kondisi sebagai berikut: �
Aplikasi tidak merespon input selama 5 detik
�
IntentReceiver tidak selesai dalam waktu 10 detik
Gambar 3.3: Ga m ba r dialog ANR [DOC08]
,,, 7 �
Merupakan rancangan yang cocok untuk pengembangan aplikasi pada Android. Karena keterbatasan di atas, seringkali programmer harus membuat suatu method call menjadi asynchronous yaitu dengan cara memasukkan fungsi tersebut ke dalam thread. Dari sisi pengembangan, library ini lebih mudah apabila diimplementasi dengan metode asynchronous. Apabila fungsi tersebut dibuat synchronous maka programmer harus membuatnya menjadi asynchronous kembali. Oleh karena itu dengan dipilihnya bentuk fungsi asynchronous maka akan memudahkan user untuk melakukan perancangan pada aplikasi sehingga menghindari pesan ANR tersebut.
3.3 Analisis Implementasi Protokol Yahoo! Messenger Pada bagian ini akan dijelaskan bagaimana sistematika penelitian yang telah dilakukan dalam mempelajari protokol Yahoo! Messenger. Subab awal akan menjelaskan struktur umum dari paket Yahoo! Messenger dan memperlihatkan beberapa perubahan dari protokol sebelumnya (Protokol versi 12) yang telah dijelaskan pada bagian dasar teori. Proses analisa protokol Yahoo! Messenger didapat melalui proses pembacaan dokumentasi yang tersedia, packet capturing dan mempelajari dari source code program yang menggunakan protokol Yahoo! Messenger. Proses packet capturing diperlukan dalam pembuatan Tugas Akhir ini adalah karena dokumentasi lengkap yang tersedia saat ini adalah versi 12 (YMSG12), sedangkan versi protokol yang digunakan dalam Tugas Akhir ini adalah versi 15 (YMSG15). Untuk itu, perlu dipelajari perubahan-perubahan yang terdapat dalam protokol ini. Selain itu, dengan proses packet capturing dapat melengkapi dokumentasi untuk jenis service yang tidak dituliskan dalam dokumentasi.
,,, 8
3.3.1 Struktur Paket Yahoo! Messenger Seperti yang telah dijelaskan pada dasar teori, Yahoo! Membuat protokol sendiri untuk layanan messenger miliknya. Protokol tersebut berjalan di atas protokol TCP/IP yang telah ada. Untuk implementasi protokol tersebut, Yahoo! membuat spesifikasi struktur paket yang dapat dilihat pada Gambar 2.2. Untuk membuat implementasi pada Android, maka dibuat suatu socket yang digunakan untuk berkomunikasi dengan server Yahoo!. Melalui socket ini, library akan mengirimkan dan menerima paket dengan struktur tersebut. Sampai saat ini, protokol Yahoo! Messenger sudah mencapai versi 15 (YMSG15). Secara umum bentuk paket dari versi ini masih sama, hanya nilai versi pada bagian version diisi oleh nilai 15 (0x000F). Struktur paket ini dapat dilihat pada Gambar 3.4. 1
2
3
Packet ID YMSG Length Service Session ID
4
5
Version
6
7
Status
0x0000
8
Data
Gambar 3.4: Str uk t u r p a ke t Yahoo! Mes se nger 15 (YMSG15)
Paket Yahoo! Messenger ini berdiri di atas paket-paket TCP/IP. Dalam implementasinya, struktur paket Yahoo! Messenger ini terletak pada bagian TCP Data. Dalam penelitian Tugas Akhir ini, beberapa kakas digunakan untuk menganalisa paket-paket yang dikirim dan diterima melalui jaringan. Salah satu kakas yang digunakan adalah Wireshark. Wireshark adalah kakas jaringan yang dapat melakukan perekaman dan penganalisaan trafik data dalam jaringan. Wireshark dalam sistem operasi windows mirip dengan kakas bernama ethereal. Struktur paket ini merupakan hasil temuan dalam Tugas Akhir ini. Header tetap memiliki panjang 20 byte. Perbedaan dari dokumentasi adalah versi protokol kini menjadi 15 dan terdapat 2 byte berisi 0x0000 setelah field version.
,,, 9
Gambar 3.5: Wires ha r k. Kakas a nalisis p a ke t p a d a jari nga n
Kakas ini sangat membantu dalam menganalisis paket-paket TCP yang dikirimkan atau yang diterima dari jaringan. Dalam kakas ini juga terdapat filter yang dapat melakukan seleksi terhadap paket-paket Yahoo! Messenger. Contoh paket Yahoo! Messenger dalam suatu paket TCP dapat dilihat pada Gambar 3.6.
Gambar 3.6: Du m p Paket TCP be risi p a ke t Yahoo! Messe nger
Gambar tersebut menunjukkan paket TCP yang berisikan paket Yahoo! Messenger yang dikirimkan oleh client ke server. Paket Yahoo! Messenger tersebut merupakan paket Yahoo_Auth yang digunakan untuk memulai proses otentikasi dengan meminta challenge string. Keterangan lebih lanjut dapat dilihat pada Lampiran C.
3.3.2 Pemrosesan Paket Yahoo! Messenger Beberapa paket Yahoo! Messenger dapat terletak dalam satu paket TCP atau sebaliknya, satu paket Yahoo! Messenger dapat terletak dalam beberapa paket TCP.
,,, 10 Seperti yang telah dijelaskan pada sub bab 2.3 bahwa TCP/IP terbagi menjadi beberapa layer. Pada layer Application, programmer membaca data dari layer dibawahnya (Transport layer) seperti membaca pada stream biasa. Layer ini menyembunyikan kerumitan yang terjadi melalui abstraksi layer tersebut. Meskipun struktur paket telah tersedia dan telah disedikan metode untuk membaca data pada TCP, perlu dibuat mekanisme parsing khusus untuk paket-paket Yahoo! Messenger. Hal ini bertujuan untuk memudahkan pembacaan field pada paket dan penanganan khusus bila terdapat kesalahan pemrosesn paket. Selain itu, bagian data pada paket Yahoo! Messenger terdiri dari pasangan key dan value yang dipisahkan oleh karakter tertentu. Tidak terdapat informasi berapa panjang masing – masing field key dan value. Oleh karena itu, mekanisme ini juga dapat membantu dalam membuat algoritma membaca paket Yahoo! Messenger tersebut. Mekanisme tersebut dapat digambarkan dalam state machine pada Gambar 3.7 yang dibuat menggunakan notasi Statechart diagram milik Unified Markup Language (UML). Untuk pemisahan antara bagian key dan value, terdapat karakter pemisah 0xC0 dan 0x80. Maka setiap kali bertemu dengan karakter pemisah tersebut, kita harus menyimpan informasi data sebelumnya sebagai key atau value. Terdapat beberapa kemungkinan error seperti kondisi dimana saat akan membaca key, mesin malah menemukan karakter pemisah lagi, sehingga 2 karakter pemisah ditemukan. Hal ini menjadi tidak benar karena nilai key untuk data tersebut adalah kosong. Tetapi untuk kasus serupa bagi value, hal tersebut diperbolehkan. Dalam beberapa kasus ditemukan bahwa terdapat field yang memiliki key tetapi memiliki value yang kosong.
,,, 11
Gambar 3.7: State Machine u n t u k m e m p r o se s p a ke t Yahoo! Messe nge r
,,, 12 State awal dalam state machine ini adalah koneksi antara client dengan server Yahoo! Messenger telah terbentuk dan siap membaca paket yang datang. State dalam mesin ini dijelaskan sebagai berikut : 1. Reading YMSG. Pada state ini, mesin membaca 4 byte data dan membandingkan dengan string “YMSG”. Apabila data yang dibaca cocok dengan string tersebut maka mesin berpindah state menjadi Reading Header. Apablia string yang dibandingkan tidak cocok, 4 byte berikutnya akan dibaca untuk dibandingkan kembali. Hal ini berjalan terus selama masih ada data. 2. Reading Header. Pada state ini mesin akan membaca dan menyimpan 2 byte berisi versi protokol Yahoo! Messenger yang digunakan. Setelah menyimpan data tersebut, mesin akan men-skip 2 byte berisi informasi tidak penting. Lalu mesin akan membaca 2 byte berisi panjang data yang dikirimkan dalam paket Yahoo! Messenger ini. Setelah menyimpan informasi tersebut maka mesin akan membaca 2 byte dan menyimpan informasi tersebut sebagai Service Id dan melanjutkan ke state Reading Status. Selanjutnya, pada state ini 2 byte akan disimpan sebagai nilai Status lalu
mesin akan membaca 4 byte berisi
Session Id. Session Id merupakan id unik yang dihasilkan oleh server Yahoo! Messenger dan nilainya dapat berubah-ubah selama proses komunikasi. Setelah menyimpan Session Id ini, mesin berpindah ke state berikutnya yaitu Prepare Reading key. 3. Prepare Reading Key. Pada tahap ini, mesin siap menerima data. Bersiap terhadap kemungkinan error yaitu menerima karekter 0xc0 lalu 0x80. Hal ini menimbulkan error karena setelah Session Id seharusnya nilai Key bukan karakter pemisah. Mesin membaca byte berikutnya lalu apabila data yang
,,, 13 dibaca adalah 0xc0 maka mesin akan berpindah state menjadi Readed 0xc0 err key possible dan apabila menerima karakter lain selain 0xc0 maka mesin berpindah state menjadi Reading Key. 4. Readed 0xC0 err Key Possible. Adalah state dimana pada tahap sebelumnya data yang dibaca adalah 0xc0, berpotensi karakter pemisah yang seharusnya tidak ada setelah informasi Session Id. Mesin membaca byte berikutnya dan membandingkan apakah karakter berikutnya adalah 0x80 atau bukan. Bila karakter yang diterima adalah 0x80 maka terjadi error dan mesin berpindah state menjadi Error. Apabila mesin menerima karakter selain 0x80 maka byte sekarang dan sebelumnya merupakan bagian dari kunci dan mesin berpindah state menjadi Reading Key. 5. Reading Key. State ini adalah state dimana mesin membaca kunci yang diakhiri oleh karakter pemisah 0xc0 dan 0x80. Apabila menemukan karakter selain 0xc0 maka mesin akan menandai bahwa posisi ini dalam bufer merupakan posisi mula kunci dan terus membaca karakter berikutnya. Apabila mesin mendapakan karakter 0xc0 maka mesin berpindah state menjadi Readed 0xc0 for key. 6. Readed 0xc0 for key. Pada state ini, mesin sebelumnya mendapatkan 0xc0. Kondisi dimana berpotensi karakter berikutnya adalah karakter 0x80 atau pemisah antara key dan value. Oleh karena itu, apabila karakter 0x80 maka mesin berpindah state menjadi Prepare Reading Value. Apabila mesin menerima karakter selain 0x80 maka byte yang dibaca merupakan bagian dari informasi key maka state berpindah kembali pada state Reading Key. 7. Prepare Reading Value. Pada state ini, mesin telah berhasil membaca satu
,,, 14 key maka mesin menyimpan data key dari posisi yang ditandai pada state Reading Key lalu membaca satu byte lagi. Sama seperti state Prepare Reading Key, pada state ini terjadi kemungkinan error dimana mesin mungkin menemukan karakter 0xC0 dan 0x80. Apabila mesin menerima karakter 0xC0 maka mesin akan berpindah state menjadi Readed 0xC0 Err Val Possible. Dan apabila mesin membaca selain karakter 0xC0 maka mesin akan berpindah state menjadi Reading Value. 8. Readed 0xc0 Err Val Possible. Sama seperti pada state Readed 0xC0 Err Key Possible, apabila mesin membaca byte berisi 0x80 maka mesin akan berpindah state menjadi Reading Key dimana ditemukan kembali 0xC0 dan 0x80. Karena dalam penelitian, nilai value boleh kosong Apabila mesin menemukan data selain 0x80 maka data tersebut merupakan bagian dari value dan berpindah state menjadi Reading Value. 9. Reading Value. State ini serupa dengan state Reading Key, apabila mesin menemukan karakter selain 0xC0 maka data tersebut akan menandai posisi saat ini sebagai posisi awal Value yang nantinya akan digunakan untuk menandai posisi awal string Value. Apabila karater yang di baca adalah 0xC0 maka mesin akan berpindah state menjadi Readed 0xC0 for Value. 10. Readed 0xc0 for Value. State ini juga sama dengan state Readed 0xC0 for Key dimana mesin mendapat karakter 0xC0 sebelumnya dan memiliki potensi untuk menerima 0x80 sebagai kombinasi karakter pemisah antara value dan key. Apabila mesin menerima karakter selain 0x80 maka informasi tersebut bukan merupakan karakter pemisah melainkan bagian dari key dan mesin akan kembali ke state Reading value. Apablia mesin menerima karakter 0x80 maka
,,, 15 data tersebut merupakan karakter pemisah dan mesin akan berpindah state menjadi End Key Value Pair. 11. End Key Value Pair. Pada state ini mesin mengetahui bahwa sebelumnya ia telah menemukan karakter pemisah dan informasi sebelum pemisah tersebut merupakan informasi value. Mesin akan menyimpan string dari posisi yang disimpan pada state Reading Value minus karakter pemisah sebagai informasi value. Pada state ini mesin akan membandingkan apakah jumlah data yang dibaca masih ditambah dua karakter adalah lebih kecil dari panjang data (data + 2 < length). Data yang dibaca ditambahkan 2 karena berdasarkan hasil penelitian di byte-byte akhir sering terdapat karakter kosong yang tidak menyimpan informasi apa-apa. Oleh karena kemungkinan potensi berikutnya adalah ditemukannya karakter pemisah, maka nilai 2 diambil dari jumlah karakter pemisah (0xC0 0x80). Apabila jumlah masih lebih kecil, maka mesin berpindah ke state Prepare Reading key untuk membaca pasangan key-value berikutnya. Apabila jumlah data yang dibaca lebih besar atau sama dengan informasi panjang paket maka proses pembacaan paket tersebut selesai dan mesin berpindah ke state Reading YMSG untuk membaca paket berikutnya. Apabila terjadi kesalahan dalam komunikasi jaringan atau koneksi terputus, maka external event ini akan membuat mesin berpindah state menjadi final state dan keluar dari loop. 12. Error, adalah state dimana terjadi kesalahan dalam pembacaan paket. Mesin akan melakukan permbersihan buffer lalu mengembalikan ke state awal Reading YMSG dan memberi notifikasi error.
,,, 16
3.4 Analisis Kebutuhan Perangkat Lunak Dalam pembahasan analisis kebutuhan perangkat lunak ini akan dibahas beberapa kebutuhan fungsional dan kebutuhan non-fungsional dari library yang akan dibangun sesuai dengan hasil dari proses analisis terhadap kebutuhan yang telah dilakukan. Kebutuhan fungsional merupakan kebutuhan yang berhubungan langsung dengan fungsi dari library ini. Sedangkan kebutuhan non-fungsional adalah kebutuhan yang tidak secara langsung berhubungan dengan fungsi utama dari library yang akan dibuat.
3.4.1 Spesifikasi Fungsional Fungsi utama dari library yang akan dibangun adalah menyediakan fungsi dan prosedur yang digunakan untuk berinteraksi dengan server Yahoo! Messenger. Selain itu library ini menyediakan fungsi call-back yang akan dieksekusi ketika suatu event terjadi. User dapat memanfaatkan fungsi call-back tersebut untuk membuat suatu aplikasi client. Sebagai contoh apabila terdapat pesan baru yang masuk, maka library ini akan melakukan eksekusi suatu fungsi call-back penerima pesan. User dapat mengisi fungsi call-back
tersebut dengan kode- kode untuk menampilkan pesan
tersebut. Spesifikasi fungsional library AYmsg dapat dilihat pada Tabel 3.1.
3.4.2 Spesifikasi Non-Fungsional Selain kebutuhan fungsional, library ini juga memiliki aspek non-fungsional yang mendukung spesifikasi fungsional. Antara lain �
User dapat menggunakan library dengan mudah.
�
Library harus dapat mendukung segala jenis koneksi internet yang didukung oleh hardware (3G, Wifi, GPRS, Edge dll).
,,, 17 Tabel 3.1: Spesifikasi fu ng sio nal d a ri library AYmsg
No.
Fungsi
Keterangan
1
Login
Melakukan proses otentikasi ke server Yahoo! dengan menggunakan username dan password dari akun yang terintegrasi dengan layanan Yahoo! lainnya. Fungsi ini merupakan fungsi utama yang harus terlebih dahulu dieksekusi sebelum fungsi-fungsi lain dapat digunakan.
2
Mengirim pesan
Melakukan pengiriman pesan teks ke user lain.
3
Menerima pesan
Melakukan penerimaan pesan teks yang dikirimkan oleh user lain.
4
Mengubah status
Melakukan perubahan status user baik menggunakan status yang telah ditentukan maupun status yang diketikkan oleh user.
5
Mendapatkan daftar teman (buddy list)
Mendapatkan daftar teman yang dikirim dari server Yahoo! yang akan digunakan untuk mengirimkan pesan.
6
Menambahkan teman
Menambahkan user lain ke dalam daftar teman yang disimpan di server.
7
Menghapus teman
Menghapus user lain dari daftar teman.
8
Menambahkan grup
Menambahkan grup baru yang berisi daftar teman-teman yang memiliki kesamaan.
9
Menghapus grup
Menghapus suatu grup yang telah ada sebelumnya.
10
Menambahkan teman ke dalam grup
Menambahkan user yang telah menjadi teman ke dalam grup yang telah tersedia.
11
Menghapus teman da- Menghapus keanggotaan teman dalam suatu grup tertentu. lam suatu grup
12
Bergabung ke dalam conference
Bergabung ke dalam conference dimana dalam suatu ruang conference terdapat beberapa user yang dapat saling bertukar pesan secara bersamaan.
13
Meninggalkan conference
Keluar dari ruang conference.
14
Mengirim pesan ke ru- Mengirimkan pesan ke dalam suatu ruang conference dimana ang conference user telah tergabung di dalamnya.
15
Menerima pesan dari ruangan conference
Menerima pesan yang dikirimkan user lain ke ruang conference.
,,, 18
3.5 Diagram Use Case Pada bagian ini akan dijelaskan tentang rancangan library yang akan digunakan. Bagian analisis akan menggunakan bantuan notasi-notasi Unified Markup Language (UML). Perancangan library ini tidak akan mengikuti sepenuhnya Unified Process, tetapi menggunakan kakas-kakas pada UML untuk menggambarkan bagaimana library yang akan dibangun.
3.5.1 Use Case utama
Gambar 3.8: Use case u t a m a library AYmsg
Library secara umum tidak bisa berjalan tanpa ada aplikasi yang menggunakannya. Oleh karena itu Use case di atas adalah suatu kasus dimana sebuah aplikasi menggunakan library AYmsg. Dalam kenyataannya, Tugas Akhir ini lebih berfokus pada pembuatan library AYmsg tersebut dan aplikasi yang dibuat hanya bertujuan untuk melakukan pengujian semua fungsi pada library ini. 3.5.1.1 Definisi Aktor
Aktor dalam use case ini hanya dua yaitu:
,,, 19 �
User. User adalah pengguna aplikasi yang memanfaatkan library AYmsg untuk melakukan pengujian. Secara tidak langsung, melalui aplikasi tersebut user akan memanggil fungsi-fungsi yang terdapat pada library AYmsg.
�
Yahoo! Messenger server. Merupakan server Yahoo! Messenger dimana library akan mengirimkan dan menerima informasi ke server ini.
Apabila terdapat kalimat “user lain” dalam bagian analisis ini, kalimat tersebut bukan secara khusus bermaksud user lain yang menggunakan aplikasi atau library ini, melainkan user Yahoo! Messenger lain yang bisa mengakses sever melalui aplikasi ini atau aplikasi messaging client lainnya.
3.5.2 Narasi Use Case Tabel 3.2: Tabel n a ra si Use case
No. 1
2
Elemen
Keterangan
Nama
Login & Logout
Deskripsi
Melakukan proses login dan logout ke sisi server.
Prekondisi
-
Proses
User memasukkan Yahoo! Id dan Password.
Kondisi Akhir
Apabila User Id dan Password dapat diotentikasi oleh server maka user dapat masuk ke dalam sistem. Apabila User dan password tidak cocok, user akan mendapatkan notifikasi dari sistem. Setelah berhasil melakukan proses otentikasi, user dapat mengakhiri sesi dengan melakukan logout.
Nama
Manajemen Daftar Teman
Deskripsi
Mendapatkan, Menambahkan dan menghapus daftar teman.
Prekondisi
User telah berhasil login.
Proses
Menambahkan atau menghapus suatu user ke dalam atau dari daftar teman.
Kondisi Akhir
User masuk atau terhapus dari daftar teman.
,,, 20 No. 5
6
7
8
Elemen
Keterangan
Nama
Bertukar Pesan
Deskripsi
Mengirimkan pesan ke user lain, dan mendapatkan pesan yang dikirimkan oleh user lain, baik dalam conference maupun dalam chat biasa.
Prekondisi
User telah berhasil login.
Proses
Mengirimkan pesan ke user lain melalui server Yahoo! Messenger.
Kondisi Akhir
User mengirimkan pesan ke user lain melalui server Yahoo! Messenger.
Nama
Mengubah Status
Deskripsi
Mengubah status user, baik memakai status yang telah didefinisikan oleh protokol maupun status yang user ketikkan.
Prekondisi
User telah berhasil login.
Proses
Mengirimkan informasi status baru ke server.
Kondisi Akhir
Status user telah ter-update.
Nama
Manajemen Grup
Deskripsi
Memasukkan user ke dalam grup tertentu atau menghapus keanggotaan user pada grup tertentu.
Prekondisi
User telah berhasil login, user yang ingin ditambahkan atau dihapus telah termasuk dalam daftar teman.
Proses
Memasukkan atau menghapus user dari atau ke dalam grup tertentu.
Kondisi Akhir
User lain memiliki keanggotaan dalam suatu grup atau keanggotaan user lain yang telah ada menjadi terhapus.
Nama
Manajemen Conference
Deskripsi
Membuat, bergabung, keluar dan mengirimkan invitasi terhadap suatu ruangan conference yang terdiri oleh satu atau banyak user lain.
Prekondisi
User telah berhasil login.
Proses
User mengirimkan perintah ke server untuk bergabung ke dalam ruangan conference.
Kondisi Akhir
User tergabung dalam ruangan conference.
,,, 21
3.6 Perancangan Kelas Pada bagian ini akan dijelaskan tentang perancangan kelas secara umum yang akan dipakai dalam pembuatan library AYmsg ini. Fokus utama dalam pembuatan Tugas Akhir ini adalah pengembangan library Yahoo! Messenger pada platform Android. Tetapi dalam pengerjaan Tugas Akhir ini akan dibuat suatu aplikasi sederhana yang tujuan utamanya adalah untuk menguji fungsionalitas library tersebut. Oleh karena itu bagian analisis dan perancangan kelas akan dibagi menjadi dua bagian agar terlihat bagaimana pembagian struktur library dan aplikasi yang akan dibangun.
3.6.1 Diagram Kelas Analisis Bagian Service Library
Gambar 3.9: Diagra m kelas a nalis Service Library
Pada bagian ini akan dijelaskan kelas-kelas yang termasuk dalam kategori Service library, yaitu library yang berisi fungsi untuk berkomunikasi dengan server Yahoo! Messenger. Secara umum hubungan kelas-kelas pada Service Library dapat dilihat pada Gambar 3.9. 3.6.1.1 Penjelasan Kelas Tahap Analisis Bagian Service Library
Kelas-kelas yang akan dibangun pada aplikasi dan library ini adalah sebagai berikut :
,,, 22 1. Client library. Kelas ini berisi fungsi-fungsi yang digunakan untuk berinteraksi dengan service. 2. Service library. Kelas ini berisi fungsi-fungsi yang digunakan untuk berinteraksi dengan server Yahoo! Messenger. 3. Service. Kelas ini merupakan kelas yang berinteraksi dengan server dengan memanfaatkan kelas Service Library. 4. Callback Client. Merupakan kelas yang akan dipanggil apabila terjadi event tertentu pada service. 5. Interface Callback. Merupakan interface fungsi callback yang digunakan untuk berkomunikasi dengan kelas client library. 6. Interface Service. Merupakan interface yang digunakan untuk berkomunikasi dengan kelas AYmsgService.
3.6.2 Diagram Kelas Analisis Bagian Client Library
Gambar 3.1 0 : Diagra m kelas a nalis Client Librar y
Pada bagian ini akan dijelaskan kelas-kelas yang termasuk dalam kategori Client Library, yaitu kelas yang langsung berhubungan dengan aplikasi yang memanfaatkan library ini. Secara umum, hubungan kelas-kelas pada Client Library dapat dilihat pada Gambar 3.10.
,,, 23 3.6.2.1 Penjelasan Kelas Tahap Analis Bagian Client Library
1. Interface callback. Merupakan interface yang digunakan service untuk berkomunikasi dengan kelas client library. 2. GUI Client. Merupakan kelas yang digunakan memberikan tampilan dimana user dapat berinteraksi langsung dengan aplikasi atau library ini
3.6.3 Diagram Kelas Analisis Lengkap Library AYmsg Diagram kelas analisis ini akan menunjukkan bagaimana kedua bagian Service library dan Client library saling berinteraksi. Diagram kelas ini dapat dilihat pada Gambar 3.11.
Gambar 3.1 1 : ,QWHUD NVLNHODV Service d aNHODV n Client librar SyD G D
Kelas Callback client akan dipanggil oleh bagian Service melalui kelas Interface Callback dan kelas Client library digunakan untuk berkomunikasi dengan bagian Service dari library ini.
3.7 Perancangan Kelas Pada bagian ini akan dijelaskan perancangan kelas-kelas yang akan dibuat
,,, 24 berdasarkan analisis kebutuhan library. Seperti pada bagian kelas analisis, bagian perancangan ini akan dibagi menjadi dua bagian. Bagian pertama akan dijelaskan perancangan kelas-kelas yang termasuk ke dalam kategori Sevice library dan pada bagian kedua akan dijelaskan perancangan kelas-kelas bagian Client library.
3.7.1 Diagram Perancangan Kelas Bagian Service Library
Gambar 3.1 2 : Diagra m p e r a nca nga n kelas Bagia n Service Librar y
,,, 25
3.7.2 Deskripsi Perancangan Kelas Bagian Service Library Pada bagian ini akan dijelaskan deskripsi kelas yang akan dibangun beserta atribut dan operasinya. 3.7.2.1 Kelas AYmsglib
Kelas ini berisi fungsi-fungsi yang digunakan untuk berkomunikasi dengan server Yahoo! Messenger. 3.7.2.1.1 Atribut Kelas Aymsglib Tabel 3.3: Tabel d af t a r a t rib u t p a d a kelas AYm sglib
Nama Atribut
Visibility (private,protected,public)
Keterangan
Socket
Private
Digunakan untuk membuat socket TCP/IP ke server Yahoo! Messenger.
Dos
Private
Digunakan sebagai output stream untuk menulis data dari socket.
Bis
Private
Digunakan sebagai input stream untuk membaca data dari socket.
Parent
Private
Digunakan untuk memanggil method pada kelas AymsgService yang mengisntansiasi kelas ini.
3.7.2.1.2 Operasi Kelas Aymsglib Tabel 3.4: Tabel d af t a r o pe r a si p a d a kelas AYm sglib
Nama Operasi Aymsglib(AYmsgService)
Visibility (private,protected,public) Public
Keterangan Konstuktor kelas Aymsglib.
,,, 26 Nama Operasi
Visibility (private,protected,public)
Keterangan
Connect()
Public
Membuka koneksi ke server.
Init()
Public
Melakukan proses inisialisasi koneksi.
Run()
Public
Operasi main thread.
SendYahooPacket( String[] key, String[] value, int Service, int status, int SessionId)
Public
Mengirimkan paket Yahoo! dengan pasangan key dan value, status dan service Id.
3.7.2.2 Kelas AYmsgService
Kelas ini adalah kelas service yang akan diimplementasi sebagai building-block service pada platform Android. 3.7.2.2.1 Atribut Kelas AymsgService Tabel 3.5: Tabel d af t a r a t rib u t p a d a kelas AYm sgService
Nama Atribut
Visibility (private,protected,public)
Keterangan
Aymsg
Private
Instans kelas AYmsglib untuk memanggil fungsi-fungsi untuk berkomunikasi dengan server Yahoo! Messenger.
Mcallback
private
Berisi instans kelas callback untuk memanggil fungsi callback apabila ada event yang terjadi.
,,, 27 3.7.2.2.2 Operasi Kelas AymsgService Tabel 3.6: Tabel d af t a r o pe r a si p a d a kelas AYm sgService
Nama Operasi
Visibility (private,protected,public)
Keterangan
Protected
Fungsi bawaan kelas Service. Fungsi ini akan dipanggil apabila kelas ini baru di instansiasi.
OnCreate()
OnBind()
Public
Fungsi bawaan dari kelas Service yang akan dipanggil bila ada kelas Activity yang berusaha menjalankan Service.
SendCallback( String[] key, String[] value, int Service, int status, int SessionId)
Public
Memanggil fungsi pada sisi client atau dikenal dengan fungsi-fungsi callback
Mbinder()
Public
Fungsi bawaan dari Android sebagai interface kelas
3.7.2.3 Kelas AYmsg
Kelas ini berisi fungsi-fungsi yang akan digunakan oleh client untuk berkomunikasi dengan Service. 3.7.2.3.1 Atribut Kelas AYmsg Tabel 3.7: Tabel d af t a r a t rib u t p a d a kelas AYm sg
Nama Atribut mService
Visibility (private,protected,public)
Keterangan
Private
Kelas yang digunakan sebagai interface untuk berkomunikasi dengan kelas IAYmsgService.
,,, 28 Nama Atribut
Visibility (private,protected,public)
Keterangan
clientCallback
Private
Kelas yang digunakan untuk berkomunikasi dengan kelas IAYmsgCallBack. Fungsi yang dipanggil dari sisi client.
SessionID
Private
Identifier SessionId yang di hasilkan oleh server Yahoo! Messenger.
Username
Private
Username yang digunakan untuk melakukan otentikasi.
Password
private
Password yang digunakan untuk melakukan otentikasi ke server.
3.7.2.3.2 Operasi Kelas AYmsg Tabel 3.8: Tabel d aft a r o pe r a si p a d a kelas AYmsg
Nama Operasi
Visibility (private,protected,public)
Keterangan
Aymsg(Activity activity)
Public
Konstuktor.
RegisterClientCallback( IAYmsgCallback callback)
Public
Fungsi ini digunakan untuk mendaftarkan fungsi callback.
unRegisterClientCallback( IAYmsgCallback callback)
Public
Fungsi ini digunakan untuk menghapus fungsi callback yang telah didaftarkan.
rawPacketHandler( String[] key, String[] value, int Service, int status, int SessionId)
Public
Fungsi ini dipanggil ketika ada paket yang dikirimkan oleh server.
OnDisconnect()
Public
Fungsi ini dipanggil ketika koneksi terputus.
3.7.2.4 Kelas IAYmsgServiceCallback
Kelas ini digunakan sebagai interface untuk berkomunikasi dengan service. Merupakan implementasi dari AIDL.
,,, 29 3.7.2.4.1 Operasi Kelas IAYmsgServiceCallback Tabel 3.9: Tabel d af t a r a t rib u t p a d a kelas IAYmsgServiceCallback
Nama Operasi
Visibility (private,protected,public)
Keterangan
rawPacketHandler( String[] key, String[] value, int Service, int status, int SessionId)
Public
Fungsi ini dipanggil ketika ada paket yang dikirimkan oleh server.
OnDisconnect()
Public
Fungsi ini dipanggil ketika koneksi terputus
3.7.2.5 Kelas IAYmsgCallback
Kelas ini digunakan sebagai interface berisi fungsi yang akan dipanggil di sisi client sebagai fungsi callback. 3.7.2.5.1 Operasi Kelas IAYmsgCallback Tabel 3.1 0 : Tabel d aft a r a t rib u t p a d a kelas IAYmsgCallback
Nama Operasi
Visibility (private,protected,public)
Keterangan
rawPacketHandler( String[] key, String[] value, int Service, int status, int SessionId)
Public
Fungsi ini dipanggil ketika ada paket yang dikirimkan oleh server.
OnDisconnect()
Public
Fungsi ini dipanggil ketika koneksi terputus
3.7.2.6 Kelas IAYmsgService
Kelas ini digunakan sebagai interface untuk mendaftarkan fungsi callback ke sisi Service.
,,, 30 3.7.2.6.1 Operasi Kelas IAYmsgService Tabel 3.1 1 : Tabel d af t ar a t rib u t p a d a kelas IAYm sgService
Nama Operasi
Visibility (private,protected,public)
Keterangan
registerCallBack(IAYmsgServiceCallback cb)
Public
Fungsi ini digunakan untuk me-register fungsi callback ke sisi Service.
UnRegisterCallBack( IAYmsgServiceCallback cb)
Public
Fungsi ini digunakan untuk menghapus fungsi callback di sisi Service yang telah di tambahkan sebelumnya.
3.7.3 Diagram Kelas Perancangan Bagian Client Library
Gambar 3.1 3 : Diagra m p e r a nca nga n kelas b agia n Client Librar y
3.7.4 Deskripsi Kelas Perancangan Bagian Client Library Pada bagian ini akan dijelaskan deskripsi kelas-kelas bagian Client Library yang akan dibangun beserta atribut dan operasinya. 3.7.4.1 Kelas ClientAYmsg
Kelas ini berisi kelas Interface atau GUI yang digunakan untuk membangun tampilan ke Client dimana melalui kelas ini user dapat berinteraksi dengan aplikasi.
,,, 31 3.7.4.1.1 Atribut Kelas ClientAYmsg Tabel 3.1 2 : Tabel d af t a r a t rib u t p a d a kelas Clien tAYm sg
Nama Atribut
Visibility (private,protected,public)
Keterangan
aymsg
Private
Instans dari kelas AYmsg yang digunakan untuk memanggil fungsi-fungsi untuk berkomunikasi dengan Service.
clientCallback
Private
Berisi instans dari kelas clientCallback yang digunakan sebagai fungsi callback
3.7.4.1.2 Operasi Kelas ClientAYmsg Tabel 3.1 3 : Tabel d aft a r o pe ra si p a d a kelas ClientAYm sg
Nama Operasi
Visibility (private,protected,public)
Keterangan
Public
Fungsi bawaan dari Android yang akan dipanggil setiap kali kelas ini di Instansiasi.
Protected
Destruktor bawaan dari Android yang akan dipanggil apabila objek ini dihapus dari memori.
OnCreate (Bundle)
OnDestroy
3.7.4.2 Kelas ClientCallback
Kelas ini adalah kelas callback sebagai implementasi dari interface IAYmsgCallback. Berisi fungsi-fungsi yang harus di implementasi oleh user sebagai fungsi callback yang akan dipanggil ketika ada event yang terjadi pada sisi Service.
,,, 32 3.7.4.2.1 Operasi Kelas ClientCallback Tabel 3.1 4 : Tabel d af t a r a t rib u t p a d a kelas Clien tCallback
Nama Operasi
Visibility (private,protected,public)
Keterangan
rawPacketHandler( Strin g[] key, String[] value, int Service, int status, int SessionId)
Public
Fungsi ini dipanggil ketika ada paket yang dikirimkan oleh server.
OnDisconnect()
Public
Fungsi ini dipanggil ketika koneksi terputus .
3.8 Diagram Kelas Perancangan Lengkap Library AYmsg Bagian ini akan memberikan diagram kelas baik yang termasuk ke dalam Client library dan yang termasuk ke dalam Service Library dan keterhubungan antara kelaskelas tersebut. Gambar diagram kelas lengkap dapat dilihat pada Gambar 3.14.
,,, 33
Gambar 3.1 4 : Diagra m kela s p e r a nca nga n lengka p
,,, 34
3.9 Perancangan Antarmuka Tujuan akhir tugas ini adalah untuk membuat suatu kumpulan fungsi atau library yang mengimplementasi protokol Yahoo! Messenger. Dalam Tugas Akhir ini juga akan dibuat suatu aplikasi sederhana yang tujuannya adalah untuk menguji fungsi-fungsi dalam library ini. Tampilan dari aplikasi ini akan dibuat sesederhana mungkin dengan tujuan agar programmer lain dapat melihat gambaran bagaimana untuk mengembangkan aplikasi messenger menggunakan library ini.
3.9.1 Activity Login Activity ini akan digunakan user untuk memasukkan Yahoo! ID dan password serta melakukan proses login ke server Yahoo! Messenger. Tampilan activity ini dapat dilihat pada Gambar 3.15.
Gambar 3.1 5 : Ta m pila n activity login Tabel 3.1 5 : Daft ar o p e ra si ya ng te r d a p a t p a d a activity login
Nama Operasi Login
Visibility (private,protected,public) Public
Keterangan Untuk melakukan proses login ke server Yahoo! Messenger.
,,, 35 Tabel 3.1 6 : Daft ar a t rib u t ya ng te r d a p a t p a d a activity login
Nama Atribut
Keterangan
Visibility (private,protected,public)
txtUsername
Private
Teks berisi keterangan username.
txtPassword
Private
Teks berisi keterangan Password.
3.9.2 Activity Utama
Gambar 3.1 6 : Ta m pila n activity u t a m a
Activity ini digunakan user untuk dapat melihat daftar teman, mengirim pesan ke teman, merubah status, menambah dan menghapus teman, menambah dan menghapus grup baru, memasukkan dan menghapus keanggotaan user dalam suatu grup.
,,, 36 Tabel 3.1 7 : Daft ar o p e ra si ya ng te r d a p a t p a d a activity u t a m a
Nama Operasi
Keterangan
Visibility (private,protected,public)
sendMessage
Public
Untuk mengirimkan pesan ke user tertentu.
changeStatus
Public
Untuk mengubah status user saat ini. Status dapat berupa status yang didefinisikan oleh protokol atau status yang user ketikan.
addNewBuddy
Public
Menambahkan user baru ke dalam daftar teman.
removeBuddy
Public
Menghapus suatu user lain dari daftar teman.
addNewGroup
Public
Menambahkan group baru.
removeGroup
Public
Menghapus suatu group yang telah ada.
AddFriendToGroup
Public
Menambahkan suatu user ke dalam group tertentu.
RemoveFriendFromGroup
Public
Menghapus keanggotaan suatu user dari suatu group.
JoinConference
Public
Bergabung ke dalam ruang conference.
Tabel 3.1 8 : Daft ar a t rib u t ya ng te r d a p a t p a d a activity u t a m a
Nama Atribut
Visibility (private,protected,public)
Keterangan
TxtBuddyList
Private
Teks berisi keterangan tulisan “Buddy List”.
LstBuddyList
Private
ListBox berisi daftar teman beserta statusnya.
,,, 37
3.9.3 Activity Chat
Gambar 3.1 7 : Ta m pila n activity chat
Form ini digunakan untuk mengirimkan pesan ke user lain. Tabel 3.1 9 : Daft ar o p e ra si ya ng te r d a p a t p a d a activity chat
Nama Operasi
Keterangan
Visibility (private,protected,public)
SendMessange
Public
Mengirimkan pesan dari txtMessage ke user tertentu.
Clear
Public
Menghapus isi dari txtMessage.
Tabel 3.2 0 : Daft ar a t rib u t ya ng te r d a p a t p a d a activity chat
Nama Atribut
Visibility (private,protected,public)
Keterangan
TxtConversation
Private
Percakapan antara user dengan user lain.
TxtMessage
Private
Pesan yang akan dikirimkan ke user lain.
,,, 38
3.9.4 Activity Conference
Gambar 3.1 8 : Ta m pila n activity Confere nce
Activity ini digunakan untuk mengirimkan dan menerima pesan dari conference. Tabel 3.2 1 : Daft ar o p e ra si ya ng te r d a p a t p a d a activity confere nce
Nama Operasi
Keterangan
Visibility (private,protected,public)
SendMessange
Public
Mengirimkan pesan dari txtMessage ke user tertentu.
Clear
Public
Menghapus isi dari txtMessage.
Tabel 3.2 2 : Daft ar a t rib u t ya ng te r d a p a t p a d a activity co nfe re nce
Nama Atribut
Visibility (private,protected,public)
Keterangan
TxtConversation
Private
Percakapan antara user dengan user lain.
TxtMessage
Private
Pesan yang akan dikirimkan ke user lain.
TxtConferenceList
Private
Daftar teman yang tergabung ke dalam ruang conference. tersebut.
,,, 39 Nama Atribut
Visibility (private,protected,public)
Keterangan
TxtConferenceName
Private
Berisi teks nama dari ruang conference.
TxtFriendList
Private
Berisi teks “Friend List”.