BAB V IMPLEMENTASI DAN PENGUJIAN Pada bab ini akan dijelaskan hal-hal yang berkaitan dengan implementasi model data dan pengujian.
V.1 Implementasi Tujuan dari bagian implementasi ini adalah mengimplementasikan model data yang sudah dirancang sehingga dapat berfungsi dalam sistem aplikasi MMORPG Nusantara Online. Selain itu bagian implementasi ini juga akan memberikan implementasi model data yang memiliki keuntungan lebih daripada model data dengan basis data yang terpusat pada server. Sub bab ini akan dijelaskan dalam beberapa sub bagian yaitu sub bagian mengenai lingkungan pengembangan dan sub bab mengenai implementasi model data baik di server maupun di client. V.1.1 Lingkungan Implementasi Lingkungan implementasi model data dibagi menjadi dua bagian yaitu lingkungan deployment
pada
server
dan
lingkungan
pengembangan
pada
pengembangan. Server 1.
Sistem Operasi : Microsoft Windows XP Service Pack 2
2.
Perangkat Lunak Utama: a. PostgreSQL 8.1 b. Pg Admin III c. Microsoft Visual Studio Dot Net 2008 Proffesional Edition
3.
Perangkat Keras Utama adalah sebuah PC dengan spesifikasi: a. Processor AMD Barton 2500 2,7 GHz b. Memory DDR1 SDRAM 1 GB
Komputer Pengembangan 1.
Sistem Operasi : Microsoft Windows XP Service Pack 2
2.
Perangkat Lunak Utama a. PostgreSQL 8.1 b. Pg Admin III c. DB Designer 4 V-1
computer
V-2
d. Microsoft Visual Studio Dot Net 2008 Proffesional Edition e. UltraEdit-32 3.
Perangkat Keras Utama: a. Notebook ACER TravelMate 4603WLCi b. Processor Intel Pentium M Processor 750 1,8 GHz c. Memory DDR2 SDRAM 1 GB
V.1.2 Implementasi Basis Data Relasional pada Server Pada sub bab ini dijelaskan implementasi basis data realasional pada server. Dalam implementasi ini, model data logis pada bagian sub bab IV.7 akan diimplementasikan pada
komputer
server.
Ada
beberapa
tahapan
yang
dilakukan
dalam
mengimplementasi basis data relasional pada server ini. Tahapan-tahapan tersebut adalah: 1.
Menginstansiasi PostgreSQL untuk basis data Nusantara
2.
Menginstansiasi basis data Nusantara dalam PostgreSQL 8.1
3.
Memasukkan data tester
Implementasi dari basis data dalam postgreSQL 8.1 akan lebih dijelaskan pada lampiran F.
Dalam mengisi kelas-kelas objek Nusantara Online dengan data dari DBMS, data harus melalui terlebih dahulu suatu kelas yang digunakan untuk mengambil data dari DBMS. Kelas pengambil data dari DBMS disebut dengan DB. Kelas DB merupakan sebuah kelas untuk mengambil data dari DBMS. Kelas DB memanfaatkan kelas-kelas lain yang dibuat untuk menyesuaikan kelas program dengan DBMS Postgre 8.1. Kelas yang digunakan sebagai penghubung dengan DBMS Postgre 8.1 adalah: 1.
SQLConnection, merupakan kelas untuk menyambungkan program dengan Postgre. SQL Connection juga mengakomodasi pengiriman query ke Postgre.
2.
SQLResultSet, merupakan kelas untuk mendapatkan hasil query dari Postgre dengan beberapa pilihan tipe data
3.
SQLException, merupakan kelas untuk mendapatkan komentas kesalahan jika terdapat error atau exception.
V-3
Dengan menggunakan kelas SQLConnection, SQLResultSet, dan SQLException, kelas DB bisa menjalankan fungsinya. Berikut adalah deklarasi kelas DB: namespace Server { class DB #ifdef USE_DB : public Core::Singleton
{ friend class Core::Singleton; #else { #endif private: DB(); unsigned char TypeATT; public: //map objek pemegang hasil DB untuk inisiasi std::map m_Monsters; std::map m_Abilities; std::map m_Items; std::map m_NPCs; std::map m_Quests; //inisiasi void LoadMonsters(); void LoadAllAbility(); void LoadAllItem(); void LoadAllNPC(); void LoadAllQuest(); void LoadQuestToNPC(); //saving void SaveMonsters(std::map& p_Monsters); void SaveMonster(Monster& p_Monster); void SaveCharacter(Character& p_Character); void SaveInventory(Monster& p_Monster); void SaveAbility(Character& p_Character); void SaveEquipment(Monster& p_Monster); void SaveQuest(Character& p_Character); //login bool ProcessLogin(Data::DFLogin& p_Login); //load karakter bool LoadCharacter(unsigned short p_UserId, Data::DFPlayerCharacter &p_PlayerCharacter); bool LoadCharacter(unsigned short p_UserId, unsigned short p_Index, Character& p_Character); bool LoadCharacter(unsigned short p_CharacterId, Character& p_Character); void GetArray(std::map& p_WorldItem, std::map p_AllStatusModifier); void LoadInventory(Monster& p_Character); void LoadAbility(Character& p_Character); void LoadEquipment(Monster& p_Character); void LoadQuest(Character& p_Character); //insertion void InsertQuestToDB(unsigned short p_Char_Id,unsigned short p_Quest_Id); //delete void DeleteAbandonedQuest(Character& p_Character); void DeleteQuestFromDB(unsigned short p_Char_Id,unsigned short p_Quest_Id);
Gambar V-1 Kelas DB pada Server
V-4
Dari data yang didapatkan kelas DB, akan dibentuk objek-objek yang ada dan akan digunakan dalam permainan Nusantara Online. Proses penyimpanan dan pengupdate-an juga dilakukan dengan menggunakan kelas DB. V.1.3 Implementasi File System pada Client Pada sub bab ini dijelaskan implementasi file system pada client. Dalam implementasi ini, model data fisik pada bagian sub bab IV.8 akan diimplementasikan pada computer client. Ada beberapa tahapan yang dilakukan dalam mengimplementasi file system pada client. Tahapan-tahapan tersebut adalah: 1. Menstrukturkan lokasi folder 2. Merancang file-file indeks untuk masing-masing objek data 3. Menuliskan file-file objek data yang sesuai dengan data tester pada basis data
Perancangan File System File system akan menangani beberapa objek data dalam Massive Multiplayer Online Role Playing Game. Data objek data tersebut adalah : 1. Ability 2. Item 3. Equipment 4. Quests 5. Area
Objek-objek tersebut hanya akan diinisiasi pada waktu client melakukan pembentukan dunia visual. Objek-objek data tersebut adalah objek data konstan yang biasanya tidak terpengaruh oleh dunia permainan sehingga tingkat frekuensi akses ke server yang terhubung ke basis data sangat kecil (sub bab III.3.6).
File system distrukturkan dalam folder khusus yang terdapat dalam paket folder program client. Proses sinkronisasi antara client dan server bisa dilihat dalam proses: 1. Dalam kedua sisi terdapat map of Object. 2. Pada waktu inisiasi server membangun map of objek dari basis data dan client membangun map of objek dari file system sampai map of objek terisi penuh. 3. Ketika client merequest ke server, client akan mengirimkan id dari objek-objek di atas ke server.
V-5
4. Server akan mengambil data penuh dari basis data dengan menggunakan id yang dikirimkan client. 5. Proses pengolahan data dengan game mekanis dilakukan di sisi server. 6. Hasil proses pengolahan dikirimkan kembali ke client 7. Client melakukan visualisasi untuk player
Selanjutnya akan dijelaskan metode penggunaan file system dengan menggunakan data ability. Sebuah file indeks dibuat untuk pencarian file data yang tersebar. Contoh file indeks : Nama File : abilitylist.abl
Gambar V-2 File Indeks Ability
Isi dari indeks file ini adalah nama-nama file ability yang berisi data khusus tentang ability tersebut. Fireball.abl akan mengacu pada suatu file lain yang bernama fireball.abl. Berikut adalah isi dari file fireball.abl. Nama File : fireball.abl
V-6
Gambar V-3 File Fireball.abl
Pada kedua sisi baik client atau server, dibutuhkan suatu kelas managerial yang bisa mengatur pengelolaan data. Kelas manajerial tersebut akan menampung request dari bagian lain yang menginginkan data lengkap. Perancangan manajer data bisa dilihat melalui contoh file AbilityManager.h.
V-7
#include "../Core/Singleton.h" #include "PrerequisitorManager.h" #include "Ability.h" namespace Common { class AbilityManager : public Core::Singleton, public PrerequisitorManager { friend class Core::Singleton; private: static const std::string ABILITY_DIR; static const std::string ABILITY_FILE; //std::map m_Abilities; /** * Create the AbilityManager instance from file. Private: use singleton to get instance. */ AbilityManager(); ~AbilityManager(); AbilityManager(const AbilityManager&); AbilityManager& operator=(const AbilityManager&); public: /** * Get copy of ability object from given id. * @param p_Id Id of the ability * @return pointer to new Ability object (clone) */ Ability* GetAbilityById(unsigned short p_Id); /** * Create string object from AbilityManager, for debugging, * @return string with all AbilityManager information */ std::string ToString(); }; }
Gambar V-4 File AbilityManager.h
Pada method konstruktor AbilityManager( ), dilakukan inisiasi dengan membuka semua file AbilityManager dan memasukkan dalam sebuah map objek.
V-8
Gambar V-5 Konstruktor Ability Manager
Parsing
isi
file
ke
dalam
objek
t_Ability.LoadFromFile(ABILITY_DIR
+
maps
dilakukan
t_FIleName,
pada
bagian
ObjectMaps).
Setelah
konstruktor selesai dijalankan maka AbilityManajer akan siap menampung permintaan bagian lain yang ingin mendapatkan data lengkap ability dengan id saja.
Dengan menggunakan method GetAbilityById maka Ability manager akan mengembalikan data lengkap melalui suatu pointer objek bernama Ability. Secara keseluruhan, kegunaan file manajer ini akan ditunjukkan melalui sebuah diagram:
Gambar V-6 Ketergantungan pada File Manajer
V-9
Setiap garis pada diagram di atas berarti terdapat request dari visual dua dimensi, visual tiga dimensi, sound, ataupun pemrosesan client ke manajer file dengan mengirimkan id saja untuk mendapatkan file data yang dibutuhkan oleh masingmasing bagian.
V.1.4 Implementasi Loading Basis Data pada Server Pada sub bab ini dijelaskan implementasi loading basis data pada server. Dalam implementasi ini, data dari basis data akan diambil dan diinstansiasi di server. Proses ini terjadi ketika dunia permainan pertama kali dibentuk. Terdapat data yang diload oleh server secara keseluruhan dan ada data yang tidak perlu diambil server pada waktu
instansiasi
dunia
permainan.
Ada
beberapa
langkah
dalam
mengimplementasikan loading basis data ke server. Tahapan-tahapan tersebut adalah: 1. Membuat program C++ untuk mengambil basis data ke server 2. Menjalankan program untuk menampung objek-objek data pada memory computer server
V.1.5 Implementasi Loading Client pada Client Pada sub bab ini dijelaskan implementasi loading basis data pada client. Dalam implementasi ini, data dari file system akan diambil dan diinstansiasi di client. Proses ini terjadi ketika dunia permainan pertama kali dibentuk. Data diload oleh client secara keseluruhan. Ada beberapa langkah dalam mengimplementasikan loading basis data ke server. Tahapan-tahapan tersebut adalah: 1. Membuat program C++ untuk mengambil data dari file system ke client 2. Menjalankan program untuk menampung objek-objek data pada memory computer client
V.1.6 Implementasi Sinkronisasi Data Pada sub bab ini dijelaskan implementasi sinkronisasi data antara server dan client. Dalam implementasi ini, Sinkronisasi Data terjadi secara simultan dengan terjadinya permainan. Pada bagian ini, implementasi menggunakan implementasi yang sebelumnya. Implementasi dalam bagian ini meliputi:
V-10
1. Proses Login Player 2. Loading data karakter 3. Merubah objek data pada client 4. Merubah objek data pada server 5. Merubah basis data pada server
V.2 Pengujian Pada sub bab ini akan dijelaskan tentang materi pengujian yang dilakukan terhadap model data bentukan yang sudah dirancang pada bagian model data fisik. Tujuan dari pengujian ini adalah memastikan bahwa model data yang diterapkan pada game Nusantara Online dapat mendukung Nusantara Online dalam memenuhi kebutuhan MMORPG baik fungsional maupun non fungsional yang ada pada bab analisis. Selain itu pada sub bab pengujian ini juga akan ditunjukkan kelebihan model data clientserver (model data yang sudah dirancang) dibandingkan dengan model data yang hanya memiliki basis data pada server melalui suatu perhitungan. Untuk mencapai tujuan pengujian tersebut, dirancang beberapa materi pengujian yaitu: 1. Loading awal pembentukan dunia permainan pada server dan client 2. Loading awal ketika karakter masuk dalam dunia permainan 3. Pengujian Sinkronisasi Data
V.2.1 Pengujian Loading Awal Pembentukan Dunia Permainan pada Server dan client Tujuan dari pengujian loading awal pembentukan dunia permainan pada server dan client adalah memastikan bahwa basis data dalam DBMS dan file system yang sudah diimplementasi sebelumnya bisa digunakan dalam MMORPG Nusantara dan memiliki keuntungan lebih jika dibandingkan dengan basis data yang hanya terletak di server ketika melakukan proses loading awal pembentukan dunia permainan (melalui suatu perhitungan). Dalam loading awal pembentukan dunia permainan, dibutuhkan proses instansiasi objek-objek dalam dunia permainan. Sebagai pengujian, akan dilihat sebuah simulasi:
V-11
Simulasi Ability adalah kemampuan yang dimiliki oleh karakter. Ability dapat digunakan untuk menyerang monster ataupun karakter lain. Kelas ability akan dianggap memiliki 10 atribut bertipe unsigned short.1 atribut yang bertipe memiliki besar 2 bytes atau 16 bits. Pada DBMS Postgre, atribut yang akan mengisi atribut kelas ability akan bertipe int2. Tipe int2 pada Postgre juga memiliki besar 2 bytes. Total besar data untuk sebuah objek ability adalah 20 bytes. Jika terdapat 100 jenis ability dalam permainan maka dibutuhkan 2000 bytes untuk menginstansiasi semua ability yang ada dalam dunia permainan. Jika model fisik data hanya menggunakan basis data pada server, maka aplikasi server harus mengirimkan 2000 bytes lagi ke aplikasi client untuk menginstansiasi semua ability yang ada dalam dunia permainan. Pada client juga harus dilakukan instansiasi semua objek ability. Jadi total biaya yang harus dilakukan untuk melakukan pemrosesan pada aplikasi MMORPG adalah: Tabel V-1 Beban Loading Awal Pembentukan Dunia Permainan (Database pada Server)
Biaya
Deskripsi
Retrieve 2000 bytes dari DBMS
Pengambilan data dari aplikasi server ke DBMS
Contruct 100 objek ability
Instansiasi 100 objek ability pada server
Transfer 2000 bytes lewat jaringan
Pengiriman data dari aplikasi server ke client
Contruct 100 objek ability
Instansiasi 100 objek ability pada client
Jika model fisik data terbagi menjadi bagian server dan client, maka biaya yang dibutuhkan adalah: Tabel V-2 Beban Loading Awal Pembentukan Dunia Permainan (Databae pada Server dan Client)
Biaya
Deskripsi
Retrieve 2000 bytes dari DBMS
Pengambilan data dari aplikasi server ke DBMS
Contruct 100 objek ability
Instansiasi 100 objek ability pada server
Contruct 100 objek ability
Instansiasi 100 objek ability pada client
Dengan model fisik data yang terbagi pada client dan server, tidak perlu dilakukan pengiriman data karena data juga terdapat pada client. Jika dalam selang waktu 1
V-12
menit terdapat 10 orang yang melakukan login maka terdapat 10 proses parallel yang harus dilakukan server untuk mengirimkan data ke aplikasi-aplikasi client. Dengan melakukan pengujian ini, dapat dilihat model data membantu MMORPG dengan baik dalam beberapa kebutuhan non-fungsionalnya. Dengan model data yang terdistribusi pada client dan server, transfer data dapat dikurangi kuantitasnya. Transfer data yang kecil ini dapat memungkinkan komunikasi yang semakin cepat antara client dan server. Komunikasi yang cepat ini akan menyebabkan kemungkinan sistem aplikasi dapat berjalan dengan real-time. Selain itu, dengan transfer yang kecil dapat dipastikan juga kinerja server dalam menerima request dari client akan berkurang sehingga server akan dapat melakukan tingkat pemrosesan parallel yang semakin tinggi.
V.2.2 Pengujian Loading Awal ketika Karakter Masuk dalam Dunia Permainan Tujuan dari pengujian loading awal ketika karakter masuk dalam dunia permainan adalah memastikan bahwa proses loading awal karakter masuk dalam dunia permainan dengan model data yang dirancang sebelumnya memiliki kelebihan dibandingkan dengan model data yang hanya menyimpan basis data pada server (melalui suatu perhitungan).
Untuk melakukan pengujian loading karakter ini, dilakukan sebuah simulasi loading awal karakter masuk dunia permainan.
Simulasi Kelas karakter memiliki 10 atribut bertipe unsigned short dan 1 map of ablity. Misalnya, karakter A memiliki 10 ability dalam map of ability-nya. Jika model fisik data hanya terdapat pada server maka ketika A melakukan login maka server harus membutuhkan biaya transfer data lewat jaringan sebesar: Tabel V-3 Beban Loading Awal ketika Karakter Masuk dalam Dunia Permainan (Database pada Server)
Biaya
Deskripsi
Transfer 20 bytes
Pengiriman atribut-atribut sebuah objek
V-13
Biaya
Deskripsi karakter
Tranfer 10 objek ability sebesar 200 bytes Pengiriman ability-ability yang dimiliki karakter tersebut dengan lengkap Jika model fisik data terbagi menjadi bagian server dan client, maka biaya yang dibutuhkan adalah: Tabel V-4 Beban Loading Awal ketika Karakter Masuk dalam Dunia Permainan (Database pada Server dan Client)
Biaya
Deskripsi
Transfer 20 bytes
Pengiriman atribut-atribut sebuah objek karakter
Tranfer 10 id objek ability sebesar 20 Pengiriman 10 id ability yang dimiliki bytes
karakter tersebut dengan lengkap
Dengan menggunakan model fisik data pada client-server, aplikasi MMORPG tidak perlu mengirimkan semua data ability karena data seluruh ability dalam dunia permainan juga terdapat pada client sehingga perbedaan dapat terlihat jelas pada transfer data.
Dengan menggunakan model data yang sudah dirancang sebelumnya akan dipenuhi beberapa sifat yang dibutuhkan sistem MMORPG. Dengan model data yang terdistribusi pada client dan server, transfer data dapat dikurangi kuantitasnya. Transfer data yang kecil ini dapat memungkinkan komunikasi yang semakin cepat antara client dan server. Komunikasi yang cepat ini akan menyebabkan kemungkinan sistem aplikasi dapat berjalan dengan real-time. Selain itu, dengan transfer yang kecil dapat dipastikan juga kinerja server dalam menerima request dari client akan berkurang sehingga server akan dapat melakukan tingkat pemrosesan parallel yang semakin tinggi.
V.2.3 Pengujian Sinkronisasi Data Tujuan dari pengujian sinkronisasi data pada client dan server adalah memastikan bahwa data dalam file system dan DBMS yang sudah diimplementasi sebelumnya bisa sinkron digunakan dalam MMORPG Nusantara dan memberikan kelebihan daripada basis data yang hanya terletak pada server saja (melalui suatu perhitungan).
V-14
Untuk melakukan pengujian sinkronisasi data pada client dan server, dibutuhkan suatu skenario aplikasi dalam menggunakan ability terhadap monster dan server yang melakukan sinkronisasi atas penggunaan ability tersebut. Skenario tersebut memiliki tahapan-tahapan, yaitu: 1. Karakter dikontrol untuk menggunakan ability 2. Client mengirimkan perintah penggunaan ability ke server 3. Server melakukan kalkulasi efek ability 4. Server mengirimkan kembali data hasil ke client 5. Client melakukan visualisasi Jika model fisik data yang digunakan hanya memiliki basis data pada server, maka biaya yang dibutuhkan untuk transfer data adalah: Tabel V-5 Beban Transfer Ability (Database pada Server)
Biaya
Deskripsi
Transfer 20 bytes
Pengiriman atribut-atribut sebuah objek ability secara lengkap
Jika model fisik data yang digunakan memiliki data pada server dan client, maka biaya yang dibutuhkan untuk transfer data adalah: Tabel V-6 Beban Transfer Ability (Database pada Server dan Client)
Biaya
Deskripsi
Transfer 2 bytes
Pengiriman id sebuah ability
Melalui perhitungan di atas dapat dilihat perbedaan yang signifikan dalam hal kuantitas data yang ditransfer. Jika menggunakan model data dengan client-server maka pengiriman yang harus dilakukan adalah hanyalah pengiriman id saja. Hal ini bertolak belakan dengan model data yang terletak hanya pada server saja. Jika menggunakan model data yang terletak hanya pada server, harus dilakukan pengiriman satu kesatuan objek ability secara lengkap.
Dengan menggunakan model data client dan server yang sudah dirancang, akan dipenuhi beberapa kebutuhan non-fungsional yang dibutuhkan sistem MMORPG. Dengan model data yang terdistribusi pada client dan server, transfer data dapat dikurangi kuantitasnya. Transfer data yang kecil ini dapat memungkinkan komunikasi yang semakin cepat antara client dan server. Komunikasi yang cepat ini akan
V-15
menyebabkan kemungkinan sistem aplikasi dapat berjalan dengan real-time. Selain itu, dengan transfer yang kecil dapat dipastikan juga kinerja server dalam menerima request dari client akan berkurang sehingga server akan dapat melakukan tingkat pemrosesan parallel yang semakin tinggi.
Untuk melengkapi pengujian, hasil pengujian lebih rinci bisa dilihat pada bagian G.5 di lampiran G.