Anda di halaman 1dari 17

!

Chat client yang telah bergabung


dapat mengirim public atau private
message ke seluruh chat client.
! Chat client dapat mengetahui daftar
chat client yang bergabung dalam
virtual room
! Chat client dapat mengakhiri aktivitas
chating kapan saja melalui fase
leaving

Context
User Group Registered User
Existing Infrastruktur LAN, WiFi, GPRS

Service Name: Chating
Version 1.0

Functional Requirement
Basic Function Text Conversation
System Functionality ! Chat client dapat bergabung ke suatu
virtual room pada chat server yang
telah running dengan melakukan join
! Chat server dapat melakukan
pengecekan user name untuk
mencegah terjadinya duplikasi nama
user chat client
! Chat server memberikan konfirmasi
ke chat client yang melakukan proses
join.
! Chat server memberikan notifikasi
pada semua chat client yang berada
pada chat room jika ada chat client
yang melakukan join atau leaving

!"! $%
!"#$%"%&'()! #+,',-,$



A.1 Requirement Specification
Desain suatu protocol diawali dengan requirement spesification yang
bertujuan untuk mendefinisikan basic function dan fungsionalitas
sistem. Dokumen requirement spesification mendefinisikan dua hal
yaitu:
! Persetujuan antara customer dan system designer
! Merupakan titik awal bagi designer untuk mengantarkan pada
operational system
Chat protocol merupakan protocol yang menyediakan layanan
kepada user untuk melakukan chating. User yang telah tergabung
dalam suatu chatroom dapat melakukan conversation dengan saling
berkirim message berupa teks. Berikut tabel requirement specification
chat protocol:
Tabel 3.1 Requirement spesification

A.2 Service Specification

Berangkat dari requirement spesification, dapat didefinisikan
lebih lanjut secara detail spesifikasi service chat protocol. Dalam
Architectural design phase, proses atau aktivitas dalam mendefinisikan
service dan behavior disebut sebagai service design. Service design
juga mendefinisikan kelakuan system dalam melakukan interaksi
dengan user maupun environment. Menurut OSI RM, sebuah service
dapat didefinisikan sebagai berikut: a service is the external
observable behavior of a system.

Entity

Entity model menggambarkan entitas, Service Provider, SAP,
Service User, dan Service Primitive. Ada dua entitas utama dalam chat
protocol yang didesain yaitu: chat client dan chat server. Entitas chat
client dan chat server dapat saling berinteraksi dengan service provider
maupun service user melalui SAP. Berikut adalah entity model chat
protocol yang mendeskripsikan tiap Service Element.






























































































Figure 81 Entity Model Connection Establishment





















Figure 82 Entity Model Data Trasfer
Figure 83 Entity Model Connection Release

Model protocol entity terdiri dari:
! Service Provider
Merupakan entitas yang menyediakan service kepada user.
Bisa juga disebut dengan istilah Lower Level Service (LLS). Chat
protocol dapat menggunakan TCP sebagai LLS
! Service User
Merupakan entitas yang menggunakan service yang
disediakan oleh Service Provider. Dalam model entity di atas
adalah user chatting sebagai chat client yang berintraksi dengan
chat server.

Interaksi
! SAP
Service Access point dapat dikatakan sebagai gerbang
interaksi antara suatu entitas dengan entitas lain. Melalui SAP dua
entitas dapat saling berinteraksi dengan bertukar Service Primitive.
Chat client memiliki 2 SAP yaitu: USAP dan MSAP yang
merupakan acces point antara user dan chat client, kemudian TSAP
yang merupakan acces point antara chat client dengan chat server.
Chat User dapat mengirimkan sinyal ke entitas chat client melalui
USAP dan menerima sinyal message melalui MSAP. Chat Server
dan chat client dapat saling bertukar PDU melalu TSAP yang
dihubungkan melalui Service Provider.

! Service Element dan Service Primitif
88















































Service Primitive merupakan informasi yang dipertukarkan
antar entitas dalam melakukan interaksi. Service Primitive yang
digunakan untuk fungsi atau tujuan yang sama dapat
dikelompokkan dalam satu service element. Dalam Mobile chat
protocol ini ada tiga service element yang berisi sekumpulan
service primitive guna suatu keperluan. Berikut Service Element
beserta service primitive yang telah didefinisikan dalam entity
model:
1. Connection Establishment : Berisi Service primitive untuk
keperluan fase join
Join(name,host,port)
name = Nama user chat
host = alamat host server
port = port chat server dalam melakukan listening
joinReqPDU(name)
name = Nama user chat
joinIndPDU(name)
name = Nama user chat
joinConfPDU(ServerName)
ServerName = nama chat server
DuplicateNameConf()
disconnConf()
2. Data Transfer: Berisi Service Primitive untuk keperluan Data
Transfer Phase
sendPb(message)
message = pesan yang akan dikirim
sendPv(message,dest)
message = pesan yang akan dikirim
dest = nama user tujuan yang akan dikirimi pesan
PbMessagePDU(message)
message = isi public message
PvMessagePDU(message,dest)
message = isi private message
list()
listReqPDU()
listConfPDU(UserList)
UserList = daftar nama user yang berada pada virtual
room
3. Connection Release: Berisi Service Primitive untuk keperluan
Leaving Phase
leave()
leaveReqPDU()
leaveIndPDU()

Expected Behavior
Behavior merupakan kelakuan sistem yang menunjukan
interaksi antar entitas dalam bertukar Service Primitive melalui SAP.
Expected Behaviour merupakan behavior yang diharapkan dari
protocol yang akan dibangun. Untuk menggambarkan behaviour
dapat menggunakan MSC. Dalam MSC ini digambarkan UserA dan
UserB sebagai chat client. Berikut adalah MSC diagram dalam
mobile chat protocol:
! MSC Join Phase
Dalam fase join, ada tiga kondisi yang dapat terjadi yaitu:
1. Fase join sukses : User A sebagai initiator mendapat
konfirmasi dari chat server
2. Duplicate name: User A menggunakan nama yang telah
digunakan oleh user lain.
3. Fase join gagal: User A gagal melakukan pembentukan
koneksi dengan server
Berikut adalah MSC yang menggambarkan ketiga kondisi dalam
fase join.













Figure 84 MSC Join Phase (Sukses)



















































































Figure 85 Diagram MSC Join Phase (Duplicate name)










Figure 88 MSC Send private message




Figure 86 MSC Join Phase (Fail)

! MSC Data Transfer
Setelah chat client berhasil melakukan connection establishment,
chat cient dapat melakukan fungsionalitas sbb:
1. Send Public Message : Mengirim pesan broadcast ke semua
chat client
2. Send Private Message : Mengirim pesan ke satu tujuan
3. Request User List : Merequest daftar nama chat user yang
sedang join.
Berikut adalah MSC yang menggambarkan ketiga fungsionalitas
tsb:









Figure 89 MSC Request User List

! MSC Connection Release
Connection Release merupakan fase untuk mengakhiri koneksi. User A
melakukan leaving chat room dan chat server akan memberi tahu ke
user B bahwa user A keluar dari virtual room.









Figure 87 MSC Send Public Message
90



usapA tsapA tsapServer tsapB msapB

leave()

leaveReqPDU(name)

leaveIndPDU(name)

DisplayMessage(msg)





Figure 90 MSC leaving phase



A.3 Protocol Specification

Setelah dihasilkan service specification Mobile Chat protocol,
maka tahap selanjutnya adalah proses protocol design. Tahap desain
protocol menghasilkan protocol specification. Protocol Spesification
merupakan formal description dari suatu protocol yang menggunakan
Formal Description Teknik(FDT) atau Spesification Language.
Spesifikasi chat protocol ini digambarkan menggunakan Spesification
Description Language (SDL)

Chat Protocol System
System terdiri dari block system yang berhubungan dan
berinteraksi. System Chat Protocol terdiri dari dua block system yaitu
chat client dan chat server. Kedua block ini saling berinteraksi melaui
channel-channel yang telah didefinisikan. Berikut gambar diagram
sistem chat protocol.


Figure 91 Diagram System Mobile Chat Protocol


Block Chat server dan chat client memiliki channel TSAP sebagai
gate untuk melewatkan PDU ke Service provider. Block client
berhubungan dengan environment melalui channel USAP dan MSAP.
Channel USAP akan menerima sinyal command dari user sedangkan
channel MSAP akan menampilkan message kepada user chat client.
TSAP merupakan channel untuk input output PDU. PDU yang dikirim
atau diterima dapat dilihat pada gambar di atas.

Chat Client Spesification
Block Chat Client
Block Chat client terdiri dari 3 process yaitu CommandReader,
PDUCoder, dan PDUProcessor. Process PDUProcessor berhubungan
dengan proces CommandReader. Proses CommandReader
berhubungan dengan environtment melalui USAP yang akan membaca
sinyal dari environtment. Environtment merupakan user yang
mengeksekusi proses ini. Detail tiap process dapat dilihat pada sub bab
process specification







Figure 92 Diagram Block Chat Client

Process Spesification Chat Client
1) Proses CommandReader
Proses CommandReader akan membaca sinyal dari
environtment yaitu user chat client. Command yang dilakukan user
akan dibaca dan diproses dengan mengeluarkan output sinyal yang
bersesuaian. State disconnect berubah menjadi ConnSession ketika
sinyal join diterima. Setelah beralih ke state ConnSession, proses
ini dapat melayani user untuk melalui fase data transfer maupun
leaving. Langkah selanjutnya akan ditangani oleh proses
PDUCoder.
Figure 93 Diagram Process CommandReader

2) Proses PDUCoder


Figure 94 Diagram Process PDUCoder
92


Proses PDUCoder menangani beberapa fungsionalitas bagi chat client
yaitu:
! Join Virtual Room
Join virtual room artinya proses untuk membangun
koneksi dengan chat server dan bergabung dalam virtual room.
Sinyal cjoin yang diterima oleh proses ini akan menghasilkan
output joinReqPDU yang akan dikirimkan ke server. Dalam fase
pembentukan koneksi, chat client menunggu konfirmasi apakah
koneksi berhasil dibangun. Jika fase pembentukan koneksi gagal
maka chat client akan berada pada status disconnect, apabila
berhasil maka status chat client connected.
! Leaving a chat room
User chat client yang telah bergabung dalam virtual room
dapat meninggalkan chat room tersebut dengan menjalankan fase
leaving. Proses leaving akan mengeluarkan output leaveReqPDU
yang akan dikirim ke server.
! Sending Message
Yaitu pengiriman message ke chat client lain yang berada
pada virtual room. Ada dua mode pengiriman, send Public
Message dan send Private message. Mode send Public message
akan mengirim message broadcast ke semua user chat client
yang terkoneksi. Sedangkan mode send private message akan
mengirim message hanya ke user tujuan. Jika chat client
melakukan mode send public message, proses ini akan
menghasilkan output sinyal PbMessagePDU. Sedangkan jika
mode send private message akan menghasilkan output sinyal
PvMessagePDU.
! List user
Yaitu request atau permintaan chat client untuk meminta
informasi daftar nama user yang yang berada pada virtual room.
Chat client akan mengirimkan ListReqPDU ke server dan server
akan membalas dengan mengirim ListConfPDU

3) Proses PDUProcessor
Proses PDUProcessor akan menerima dan membaca semua
PDU yang diterima dari chat server. Setiap PDU memiliki sinyal
code yang akan dibaca oleh proses ini. Berdasarkan sinyal code
tersebut, akan diambil data PDU dan ditampilkan ke layar user.
Pada gambar dibawah ini dapat dilihat sinyal input yang diterima
oleh proses ini, dan state yang terjadi.
























Figure 95 Diagram Proses PDUProcessor

Chat Server Spesification
Block Chat Server
Dalam diagram block Chat Server terdapat 3 proses yaitu
InitConnection, ServeClient dan PDUForwarder. Process
InitConnection merupakan proses yang berfungsi menerima koneksi
dari chat client. Proses InitConnection akan meng-create proses
ServeClient yang akan menerima PDU setelah client terkoneksi
Sedangkan proses PDUForwarder berfungsi untuk memforward sinyal
ke chat client.







Figure 96 Diagram Block Chat Server

Process Spesification Chat Server
Dalam Block Chat Server terdapat tiga proses yaitu:
1) Process InitConnection
Chat Server selalu melakukan proses InitConnection untuk
menunggu koneksi baru dari client. Sinyal joinReqPDU yang
datang akan menambah jumlah client yang disimpan oleh server.
Jika koneksi dengan chat client telah terbentuk, maka proses ini
akan mengcreate proses ServeClient.
Figure 97 Diagram Process InitConnection
2) Process ServeClient






















Figure 98 Diagram Proses ServeClient
94




Proses ServeClient akan menerima semua PDU dari chat client
yang telah berhasil melakukan koneksi dan bergabung dalam chat
room. Proses ini akan menangani sesi koneksi dengan chat user. Sinyal
yang datang dari chat client akan diproses lebih lanjut oleh proses
PDUForwarder.
3) Process PDUForwarder

























Figure 99 Diagram Proses PDUForwarder

Process PDUForwarder akan membaca sinyal dari proses
ServeClient dan menindaklanjuti dengan mengirim sinyal sesuai fase
yang sedang dijalankan. Misalnya jika sinyal joinReq diterima, maka
PDUForwader akan mengirim sinyal joinConfPDU atau
duplicateNameConf. Jika ada sinyal PvMessage maka proses ini akan
menghasilkan output PvMessagePDU dan seterusnya sesuai pada
gambar di atas.

Verifikasi dan Simulasi Model SDL
Setelah seluruh spesifikasi SDL dibuat, dapat dilakukan verifikasi
dan simulasi model SDL menggunakan tools Cinderella SDL. Verifikasi
ini bertujuan untuk mengecek kebenaran suatu model. Verifikasi model
spesifikasi SDL mobile chat protocol ini dilakukan dalam beberapa level
yaitu:
Level 1: Pengecekan graphical symbol
Level 2: Berkenaan dengan representasi internal yang dibangun dalam
suatu simbol
Level 3: Syntax check
Level 4: Static semantic analysis, pengecekan properti entitas SDL
apakah penggunaannya sudah konsisten.
Level 5: Pengecekan aliran, input dan output sinyal.

Jika telah melalui tahapan verifikasi tersebut dan tidak ada lagi
error, maka dapat dilakukan simulasi untuk men-generate MSC. MSC
hasil Simulasi digunakan untuk melihat real behaviour dari spesifikasi
yang telah dibuat. Dengan melihat MSC ini dapat diketahui apakah
expected behaviour sudah tercapai atau belum. Berikut MSC hasil
simulasi model SDL mobile chat protocol
1. Connection Establishment
















Figure 100 Verified MSC Join Phase (sukses)



























Figure 101 Verified MSC Join Phase (duplicate name)











Figure 104 Verified MSC Send Private Message









Figure 102 Verified MSC Join Phase (fail)

2. Data Transfer











Figure 103 Verified MSC Send Public Message
Figure 105 Verified MSC Send Request User List


3. Connection Release












Figure 106 Verified MSC Leaving phase

3.3.5 Protocol Data Unit
Protocol Data Unit adalah format informasi yang dipertukarkan
antara chat client dan chat server. Secara umum format suatu PDU terdiri
dari dua header yaitu:
PCI DataPDU
96

sebagai
tanda
bahwa ada
chat client
yang telah
bergabung
4 duplicateNameCon
f

DN
PDU yang
dikirimkan
server
karena
user name
yang
digunakan
client
sudah
dipakai
oleh client
lain.

N
o
Nama PDU Format PDU Deskripsi
1 joinReqPDU

JR UserName
PDU yang
dikirimkan
oleh chat
client ke
server
untuk
bergabung
dalam
virtual
room
2 joinConfPDU

JC ServerName
ServerName=Nama chat
server
PDU
balasan
dari server
kepada
client
yang
berhasil
bergabung
dalam
virtual
room
3 joinIndPDU

JI UserName
UserName = Nama chat client
PDU yang
dikirimkan
server
kepada
semua
client
yang
terkoneksi

No Nama PDU Format PDU Deskripsi
1 PbMessagePDU

Pb Message
Message = Isi Pesan
Public
message
yang akan
dikirim
broadcast ke
semua chat
client
2 PvMessage

Pv dest Message
Dest = Nama client yang akan
dikirimi pesan
Message = Isi Pesan
Private
message
yang akan
dikirim
hanya ke
chat client
tujuan
3 listReqPDU

IR
PDU yang
dikirimkan
client untuk
meminta
daftar client

PCI adalah Protocol Control Information sebagai identifikasi tipe
PDU. Sedangkan dataPDU adalah isi PDU itu sendiri. Tiap PDU
didefinisikan PCI yang berbeda sebanyak 2 karakter atau berukuran 2
byte = 16 bit. Untuk ukuran data PDU berukuran relatif terhadap
banyaknya karakter yang diinputkan user. Misalnya untuk joinReqPDU
jika username berukuran 5 karakter maka ukuran PDU sebanyak 5 byte
dan total ukuran PDU sebanyak 7 byte.

Berikut adalah tabel abstrak PDU pada Service Element Connection
Establishment
Tabel Daftar PDU Connection Establishment









Berikut adalah tabel abstrak PDU pada Service Element Data Transfer
Tabel Daftar PDU Data Transfer


yang sedang
bergabung
dalam virtual
room
4 listConfPDU

IC UserList
PDU yang
dikirimkan
server untuk
memberikan
daftar user
yang berada
pada virtual
room

No Nama PDU Format PDU Fungsi
1 leaveReqPDU

LR
PDU yang
dikirim oleh
cliet untuk
keluar dari
virtual room
dan
mengakhiri
koneksi
2 leaveIndPDU

LI
PDU yang
dikirim oleh
server untuk
memberi
bahwa ada
client yang
meninggalkan
virtual roomt

interface. Berikut Package yang digunakan untuk mengimplementasikan
chat client:
Networking Package
Networking package pada MIDP adalah javax.microdition.io.
Package ini menyediakan Generic Connection Framework (GCF) yang
didalamnya terdapat class utama yaitu class Connector. Sedangkan
interfaces yang terdapat dalam package ini dapat digambarkan sebagai
berikut:

Connection





Berikut adalah tabel abstrak PDU pada Service Element Connection
Release
Tabel Daftar PDU Connection Release

DatagramConnection

OutputConnection InputConnection

StreamConnectiomNotifi
er

SecurityInfo


UDPDatagramConnection

StreamConnection
ServerSocketConnectiom




CommConnection ContentConnection SocketConnection


HTTPConnection SecureConnection

















A.4 Framework Implementasi
J2ME MIDP menyediakan berbagai macam package untuk
mengimplementasikan sebuah system. Setiap Package memiliki class dan
Figure 107 Struktur Interfaces Networking Package

Implementasi chat client menggunakan interface
SocketConnection. SocketConnection diturunkan dari
StreamConnection yang berjalan diatas TCP
! User Interface Package
UI package adalah javax.microedition.lcdui. package ini
menyediakan class dan interaces untuk keperluan Graghical User
Interface. Chat client menggunakan package ini untuk membuat
tampilan ke user chat.
! Core Package:
Core package ada tiga yaitu:
java.io : Menyediakan class untuk input dan output data melalui
stream
java.lang: Menyediakan class fundamental untuk java
programming language
98




























































































































































































































java.util: Berisi sekumpulan class dan fasilitas date dan time.
Class InputStream dan OutputStream dalam package java.io
digunakan sebagai media untuk mengalirkan message stream
antara client dan server.

Class Diagram
! Block Chat Server
Block Server diimplementasikan menjadi 2 class yaitu class Server
dan Listener. Class Listener akan dipanggil oleh class Server
dalam prosedur InitConnection.


! Block Chat Client



Server
IndexUser : Integer
nCli ents : List
NameServer : Stri ng
Dupl i cateNam e : char
tuj uan : String
Li stNam e : Li st

mai n()
Server()
1 *
SendPbM essage()
SendPvM essage()
PDUForwarder()
getIndexUser()
Ini tConnecti on()









Lis tener
Buffer : BufferedReader

ServeCl i ent()
Listener()





ChatMain
nam e : T extFi el d
host : T extFi el d
port : T extFi el d
exi t : Com m and
j oi n : Com m and
cl i ent : Cl i ent
di spl ay : Di spl ay
f : Form

ChatMai n()
startApp()
i sPaused()
startApp()
i sPaused()
pauseApp()
destroyApp()
StartConnecti on()
com m andActi on()



Client
i nputpv : InputPvM essage
i nputpb : InputPbM essage
parent : ChatM ai n
i s : InputStream
os : OutputStream
sc : SocketConnecti on
wri te : Com mand
wri tePv : Com m and
l eave : Com m and
l i st : Command
sender : Sender

Cl i ent()
run()
PDUCoder()
Di spl ayM essage()
PDUProcessor()
com m andActi on()
start()
stop()
pai nt()
keyPressed()

ChatPacket
msg : Stri ng

ChatPacket()


InputPbMes s age

InputPbMessage()
ResetUI()

InputPvMes s age
name : T extFi el d
msg : T extFi el d

InputPvMessage()
ResetUI()

Sender
os : OutputStream
message : Stri ng

Sender()
send()
run()
Figure 108 Class diagram chat server
stop()




Figure 109 Class Diagram Chat Client

Chat Client terdiri dari 6 class seperti pada gambar di atas. Class
utama adalah class ChatMain yang akan mengeksekusi class Client
jika proses pembentukan koneksi berhasil.

Untuk melakukan join user harus mendefinisikan host dan port. Host
merupakan IP address server dan port merupakan port listening yang
digunakan server. Dengan parameter host dan port, client membuka koneksi
ke server.

Detil Implementasi
Proses CommandReader menangani input sinyal dari user. Input
sinyal berupa command yang dilakukan oleh user chat client yaitu: [join,
leave, sendPv, sendPb, list]. Ketika user melakukan aksi maka prosedur
CommandAction akan membaca command dari user. Setiap command
akan dibaca dan mengirimkan sinyal ke proses PDUCoder seperti yang
digambarkan dalam diagram block Chat client. Berikut bentuk
implementasi proses CommandReader.

// CommandAction pada class ChatMain

public void commandAction(Command cmd, Displayable s) {
String nick = name.getString();
if (cmd == join) {
if (nick.equals("")){
// nick name kosong
}else
{
StartConnection();
}
}
}

// Command Action pada class Client

public void commandAction(Command cmd, Displayable d) {
if (d == inputpb && cmd.getLabel().equals("sendPb")){
PDUCoder("CsendPv");
display.setCurrent( this );
}
if (d == inputpv && cmd.getLabel().equals("sendPv")){
PDUCoder("CsendPv");
display.setCurrent( this );
}
if (cmd == list){
PDUCoder("Clist");
}
if (cmd == leave){
PDUCoder("Cleave");
}
}
String host = parent.host.getString();
int port = Integer.parseInt(parent.port.getString());
String url = "socket://" + host + ":" + port;
Sc = (SocketConnection) Connector.open(url);

Jika nama tidak diisi maka akan ada alert. Jika ada kesalahan pengisian host
atau port yang menyebabkan gagalnya proses connection establishment,
maka program akan menjalankan exception handler dengan menuliskan
disconnConf

Proses PDUCoder
Setelah CommandReader membaca sinyal command yang dilakukan user,
Proses PDUCoder akan dipanggil dengan parameter sinyalnya. Sinyal yang
diterima proses PDUCoder adalah: [Cjoin,Clist, Cleave,CsendPv,CsendPb].
Masing-masing sinyal akan menghasilkan PDU yang bersesuaian untuk
dikirimkan ke server. Misalnya sinyal Cjoin akan menghasilkan output
joinReqPDU yang dikirimkan ke server, demikian juga dengan sinyal yang
lain. Dalam proses PDUCoder dilakukan pengkodean format PDU yang
telah ditentukan dalam protocol spesification.
public void PDUCoder(String sinyal){
if(sinyal.equals("Cjoin")){
String joinReqPDU = "JR"+nama;
sender.send(joinReqPDU);
}
if(sinyal.equals("Clist")){
String listReqPDU="IR";
sender.send(listReqPDU);
}
if (sinyal.equals("Cleave")){
String leaveReqPDU="LR"+nama;
sender.send(leaveReqPDU);
}
if(sinyal.equals("CsendPv")){
String msg =inputpv.msg.getString();
String dest = inputpv.name.getString();
String from = parent.name.getString();
String PvMessagePDU="Pv"+from+" > "+msg;
sender.send("to"+dest);
sender.send(PvMessagePDU);
}
if(sinyal.equals("CsendPb")){
String msg = inputpb.getString();
String PbMessagePDU = "Pb"+nama+" > "+msg;
sender.send(PbMessagePDU);
}}
10
0
Proses PDUProcessor
Proses PDUProcessor merupakan proses membaca input stream
dan menampilkan ke layar. Proses ini berjalan ketika user telah
melakukan join dalam virtual room. Begitu user masuk dalam virtual
parent.name.setString("");
// bersihkan layar
msgs.removeAllElements();
repaint();
stop();
}

room, maka proses ini dieksekusi untuk selalu listen dan membaca input
stream pada client. Selama user masih terkoneksi maka proses pembacaan
input stream dilakukan dalam suatu looping. Input stream yang dibaca
disimpan dalam Stringbuffer dan dibaca sebagai PDU yang diterima dari
server.

while (true) {
StringBuffer sb = new StringBuffer();
int c = 0;
while (((c = is.read()) != '\n') && (c != -1)) {
sb.append((char) c);
}
if (c == -1) {
break;
}
// Display message to user
String incomingPDU = sb.toString();
String PCI=incomingPDU.substring(0,2);
String Message=incomingPDU.substring(2);
PDUProcessor(PCI,Message);
}//end while
}

Implementasi Chat Server
Proses InitConnection adalah proses untuk menunggu dan menerima
koneksi dari client. Koneksi dibuka oleh server pada port tertentu,
artinya server selalu listen pada port tersebut untuk menerima dan
merespon request dari client. Pertama kali sever akan membuka

public void InitConnection(Socket clientSocket) throws
IOException
{
final PrintWriter out = new
PrintWriter(clientSocket.getOutputStream(), true);
mClients.add(out);

new Listener(clientSocket.getInputStream()) {
public void ServeClient(String PDU) {
// jalankan prosedur ServeClient
}
}


PDU yang diterima akan diproses berdasarkan PCI yang menandakan tipe
PDU yang datang dari server.
public void PDUProcessor(String PCI, String msg){
if (PCI.equals("JC")){
DisplayMessage("Welcome to "+msg);
koneksi dengan membuat objek dari class ServerSocket.
}

Jika server mendengar ada permintaan koneksi melalui port tertetu,
maka server akan menerima request dengan methode accept. Proses ini
akan menambahkan jumlah list client dan mengirim joinConfPDU.
Kemudian akan meng-create proses ServeClient.
}

if (PCI.equals("JI")){
DisplayMessage (msg+" Join in the room");

ServerSocket serverSocket = new ServerSocket(port);
while (true) InitConnection(serverSocket.accept());

}
if (PCI.equals("LI")){
DisplayMessage (msg+" Leaving Room");
}
if (PCI.equals("IC")){
DisplayMessage ("Daftar user : "+msg);
}
if(PCI.equals("Pv")){
DisplayMessage ("Pv Message : "+msg);
}
if(PCI.equals("Pb")){
DisplayMessage (msg);


Proses ServeClient
Proses ServeClient dicreate oleh proses InitConnection. Proses
ServeClient bertugas untuk menerima PDU dari client yang telah
bergabung dalam virtual room. Proses ServeClient akan membaca PDU
yang masuk berdasarkan PCI tiap PDU. Kemudian proses ini akan
mengirim sinyal ke proses PDUForwarder untuk mengirim PDU
sebagai respon dari PDU yang datang.
}
if (PCI.equals("DN")){
Alert alert = new Alert( "Duplicate Name", "Please use
Other Name", null, AlertType.INFO );
alert.setTimeout( Alert.FOREVER );
display.setCurrent( alert, parent.f );

public void ServeClient(String PDU) {
String PCI=PDU.substring(0,2);
String data=PDU.substring(2);

if (PCI.equals("JR")){

PDUForwarder("joinReq",data);
}
System.out.println("dest: "+dest);
sendPvMessage(PvMessagePDU,dest);
System.out.println("Output PDU:
if (PCI.equals("LR")){
PDUForwarder("leaveReq",data);
String user=data;
mClients.remove(out);
ClientName.remove(user);
"+PvMessagePDU);
}
}
}
if(PCI.equals("Pb")){
PDUForwarder("PbMessage",data);
}
if (PCI.equals("to")){
tujuan=data;
}
if(PCI.equals("Pv")){
PDUForwarder("PvMessage",data);
}
if(PCI.equals("IR")){
String UserList = ClientName.toString();
String ListConfPDu = UserList;
out.println("IC"+ListConfPDu);
}
}


Proses PDUForwader
Proses PDUForwader merupakan proses yang akan membaca
sinyal dari proses ServeClient kemudian akan memforward dengan PDU
yang bersesuaian berdasarkan spesifikasi chat server. Misalnya jika ada
sinyal leaveReq maka proses ini akan memforward leaveIndPDU ke
semua chat client, dst.
public void PDUForwarder(String signal,String DataPDU){
String pdu = DataPDU;
if (signal == "joinReq"){
String joinIndPDU = "JI"+pdu;
sendPbMessage(joinIndPDU);
System.out.println("Output PDU: "+joinIndPDU);
}
if (signal=="leaveReq"){
String leaveIndPDU = "LI"+pdu;
sendPbMessage(leaveIndPDU);
System.out.println("Output PDU: "+leaveIndPDU);
}
if(signal == "PbMessage"){
String PbMessagePDU="Pb"+pdu;
sendPbMessage(PbMessagePDU);
System.out.println("Output PDU:
"+PbMessagePDU);

}

//sendPVMessage(pdu);
if(signal == "PvMessage"){
String PvMessagePDU="Pv"+pdu;
String dest = tujuan;