V-1
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 computer 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
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.
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<DB> {
friend class Core::Singleton<DB>; #else
{ #endif
private: DB();
unsigned char TypeATT; public:
//map objek pemegang hasil DB untuk inisiasi std::map<unsigned short, Monster*> m_Monsters;
std::map<unsigned short, Common::Ability> m_Abilities; std::map<unsigned short, Common::Item> m_Items; std::map<unsigned short, NPC*> m_NPCs;
std::map<unsigned short, Quest> m_Quests; //inisiasi void LoadMonsters(); void LoadAllAbility(); void LoadAllItem(); void LoadAllNPC(); void LoadAllQuest(); void LoadQuestToNPC(); //saving
void SaveMonsters(std::map<unsigned short, Monster*>& 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<unsigned short, Common::Item>& p_WorldItem, std::map<unsigned short, Common::StatusModifier> 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);
Dari data yang didapatkan kelas DB, akan dibentuk objek-objek yang ada dan akan digunakan dalam permainan Nusantara Online. Proses penyimpanan dan peng-update-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
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.
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.
#include "../Core/Singleton.h" #include "PrerequisitorManager.h" #include "Ability.h"
namespace Common {
class AbilityManager : public Core::Singleton<AbilityManager>, public PrerequisitorManager<Ability> {
friend class Core::Singleton<AbilityManager>; private:
static const std::string ABILITY_DIR; static const std::string ABILITY_FILE; //std::map<unsigned short, Ability> 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.
Gambar V-5 Konstruktor Ability Manager
Parsing isi file ke dalam objek maps dilakukan pada bagian t_Ability.LoadFromFile(ABILITY_DIR + t_FIleName, 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:
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 masing-masing 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:
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 client-server (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:
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
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
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
bytes
Pengiriman 10 id ability yang dimiliki 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).
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
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.