• Tidak ada hasil yang ditemukan

Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP

N/A
N/A
Protected

Academic year: 2021

Membagikan "Team project 2017 Dony Pratidana S. Hum Bima Agus Setyawan S. IIP"

Copied!
79
0
0

Teks penuh

(1)

 

 

 

 

 

Hak cipta dan penggunaan kembali:

Lisensi ini mengizinkan setiap orang untuk menggubah,

memperbaiki, dan membuat ciptaan turunan bukan untuk

kepentingan komersial, selama anda mencantumkan nama

penulis dan melisensikan ciptaan turunan dengan syarat

yang serupa dengan ciptaan asli.

Copyright and reuse:

This license lets you remix, tweak, and build upon work

non-commercially, as long as you credit the origin creator

and license it on your new creations under the identical

terms.

(2)

DAFTAR LAMPIRAN

Lampiran I FORM BIMBINGAN

Lampiran II USE CASE DIAGRAM SISTEM

Lampiran III CLASS DIAGRAM PROGRAM AGENT

Lampiran IV CLASS DIAGRAM PROGRAM CLIENT

Lampiran V FLOWCHART PROGRAM AGENT

a. Flowchart Program

b. Flowchart broadcast

c. Flowchart dbchecker

d. Flowchart listen10111

e. Flowchart Thread ChatHandler : doChat

f. Flowchart listen11111

g. Flowchart Thread DBConnector: doChat

h. Flowchart DBConnector : getAPlist

i. Flowchart DBConnector : getPlist

j. Flowchart DBConnector : getPIPlist

k. Flowchart listen11113

l. Flowchart Thread FileDataServer: doChat

m. Flowchart listen11114

n. Flowchart Thread FileByteServer: doChat

Lampiran VI FLOWCHART PROGRAM CLIENT

(3)

e. Flowchart Thread Listener

f. Flowchart Chat

g. Flowchart Thread listening10011

h. Flowchart Thread listener2

i. Flowchart MsgRcvr

j. Flowchart Aroom

k. Flowchart RDBForm

l. Flowchart Getdata

m. Flowchart Thread listenclient

n. Flowchart chat_init

o. Flowchart Thread listeningto10011

Lampiran VII KODE SUMBER 1 PROGRAM AGENT

a. Program.cs

Lampiran VIII KODE SUMBER 2 PROGRAM CLIENT

a. Form1.cs

b. Chat_init.cs

c. Chat.cs

d. Form_AProom.cs

e. RDBForm.cs

f. Msgrcvr.cs

Lampiran IX DATABASE DBAC

a. Entity Relationship Diagram (ERD)

b. Tabel ap

c. Tabel client

d. Tabel message

e. Instalasi MySQL

(4)

Lampiran XI TAMPILAN PROGRAM CLIENT

(5)

LAMPIRAN I

(6)

LAMPIRAN II

(7)
(8)

LAMPIRAN III

(9)

Class diagram dari program agent adalah sebagai berikut.

(10)

LAMPIRAN IV

(11)

Class diagram dari program client adalah sebagai berikut.

(12)

LAMPIRAN V

(13)

Pada aplikasi agent, flowchart dibagi dalam lima bagian besar berdasarkan class-nya.

Lima flowchart class tersebut diuraikan sebagai berikut.

(14)
(15)

d. Flowchart listen10111

e.

Flowchart New

(16)
(17)
(18)

h. Flowchart DBConnector :

getAPlist

i. Flowchart DBConnector :

getPlist

j. Flowchart DBConnector :

getPIPlist

(19)

k. Flowchart listen11113

l. Flowchart Thread

FileDataServer: doChat

(20)

m. Flowchart listen11114

n. Flowchart Thread

FileByteServer: doChat

(21)

LAMPIRAN VI

(22)

Pada aplikasi client, flowchart dibagi dalam enam bagian besar berdasarkan form-nya.

Enam bagian flowchart tersebut diuraikan sebagai berikut.

(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)

LAMPIRAN VII

(37)

a. FILE NAME : Program.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using MySql.Data.MySqlClient; using System.Collections; using System.IO; using System.Diagnostics; using System.Net.NetworkInformation; namespace Agent { class Program {

public static void Main(string[] args) {

Thread t_listen10111, t_broadcast, t_dbchecker, t_listen11111, t_listen10112; bool live = false;

string livestr = null;

Agent AP = new Agent (); AP.getAPname();

AP.getIPserver(); AP.getIPkomputer();

MySqlCommand command;

MySqlConnection conn = new MySqlConnection("Server=" + AP.SIP + ";Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;"); conn.Open();

conn.CreateCommand();

command = conn.CreateCommand();

command.CommandText = "INSERT INTO agent VALUES ('" + AP.APname + "', '" + AP.APIP + "', '")";

command.ExecuteNonQuery(); conn.Close();

t_listen10111 = new Thread(new ThreadStart(AP.l_function1)); t_listen10111.Start();

t_dbchecker = new Thread(new ThreadStart(AP.messagecheckerinDBS)); t_dbchecker.Start();

t_broadcast = new Thread(new ThreadStart(AP.broadcast)); t_broadcast.Start();

t_listen11111 = new Thread(new ThreadStart(AP.l_function2)); t_listen11111.Start();

t_listen10112 = new Thread(new ThreadStart(AP.l_function3)); t_listen10112.Start();

while (live != true) { livestr = Console.ReadLine(); if (livestr == "pts") { handleClinet.count_elapsed_time(); conn.Open();

command.CommandText = "DELETE FROM agent WHERE AP_name = '" + AP.APname + "'";

command.ExecuteNonQuery(); conn.Close();

conn.Open();

command.CommandText = "DELETE FROM message WHERE APnameDest = '" + AP.APname + "' AND readstatus = '0'";

command.ExecuteNonQuery(); conn.Close();

conn.Open();

command.CommandText = "DELETE FROM client WHERE user_APname = '" + AP.APname + "'";

command.ExecuteNonQuery(); conn.Close();

live = true;

(38)

Console.WriteLine("---You can now shut agent---"); }

else {

Console.WriteLine("Type 'pts' before terminate!"); } } Console.Read(); } } class Agent {

public string APname, APIP, SIP; string PinAPtosend = "2|"; public static int conncount; public bool listenflag = false; IPHostEntry ipEntry;

IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName()); TcpListener ap_listener10111, ap_listener11111, ap_listener10112; TcpClient ap_client10111, ap_client11111, ap_client10112;

public static Hashtable Listname = new Hashtable(); public static Hashtable Listname2 = new Hashtable(); public static Hashtable listIP = new Hashtable(); MySqlConnection conn1, conn2, conn3;

MySqlCommand command1;

MySqlDataReader reader1;

private string[] PinAP = new string[100];

public void getAPname() {

Console.Write("Agent name : "); APname = Console.ReadLine(); }

public void getIPserver() { Console.Write("IP DBS : "); SIP = Console.ReadLine(); try { Console.WriteLine("Pinging DBS..."); TcpClient cek = new TcpClient(); cek.Connect(SIP, 3306);

if (cek.Connected == true) {

cek.Close();

conn1 = new MySqlConnection("Server=" + SIP +

";Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;"); conn2 = new MySqlConnection("Server=" + SIP +

";Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;"); conn3 = new MySqlConnection("Server=" + SIP +

";Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;"); }

}

catch(Exception) {

Console.WriteLine("IP Server not valid. Please insert valid IP."); getIPserver();

} }

public void getIPkomputer() {

(39)

byte[] data = Encoding.ASCII.GetBytes(tekstosend);

sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); Console.WriteLine("Type 'pts' before terminate!");

Console.WriteLine("Agent Started!\nSending message : " + tekstosend); for (; ; ) { sock.SendTo(data, iep1); Thread.Sleep(250); } }

public void l_function1() {

IPAddress my_ipaddr = Dns.Resolve(APIP).AddressList[0]; ap_listener10111 = new TcpListener(my_ipaddr, 10111); ap_client10111 = default(TcpClient);

ap_listener10111.Start();

Console.WriteLine("Chat server started..."); while ((listenflag != true))

{

ap_client10111 = ap_listener10111.AcceptTcpClient();

byte[] bytesFrom = new byte[1048576]; string dataFromClient = null;

NetworkStream ap_stream = ap_client10111.GetStream();

ap_stream.Read(bytesFrom, 0, (int)ap_client10111.ReceiveBufferSize); dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.TrimEnd('\n', '\0', '\r'); string[] splitchar = dataFromClient.Split('|');

string appcode = Convert.ToString(splitchar[0]); string data = Convert.ToString(splitchar[1]);

if (appcode == "4") //P data {

string[] nameandip = data.Split('^');

string tempname = Convert.ToString(nameandip[0]); string tempIP = Convert.ToString(nameandip[1]); //checklist(tempname, tempIP);

registeringtoDBandlist(tempname, tempIP); }

} }

public void l_function2() {

IPAddress my_ipaddr = Dns.Resolve(APIP).AddressList[0]; ap_listener11111 = new TcpListener(my_ipaddr, 11111); ap_client11111 = default(TcpClient);

ap_listener11111.Start();

Console.WriteLine("RDB server started..."); while ((listenflag != true))

{

ap_client11111 = ap_listener11111.AcceptTcpClient(); handleClinet2 client = new handleClinet2();

client.startClient(ap_client11111, Listname); }

}

private void registeringtoDBandlist(string tempname, string tempIP) { try { Listname.Add(tempname, ap_client10111); listIP.Add(tempname, tempIP); conncount++; //register to database conn1.Open(); command1 = conn1.CreateCommand();

command1.CommandText = "INSERT INTO client VALUES ('" + tempname + "', '" + tempIP + "', '" + APname + "')";

command1.ExecuteNonQuery(); conn1.Close();

(40)

Console.WriteLine("Client - " + tempname + " join."); handleClinet client = new handleClinet();

client.startClient(ap_client10111, tempname, Listname, APname);

conn1.Open();

command1.CommandText = "SELECT user_name FROM client WHERE user_APname = '" + APname + "'";

reader1 = command1.ExecuteReader();

while (reader1.Read()) {

for (int i = 0; i < reader1.FieldCount; i++) { PinAP[i] = reader1.GetValue(i).ToString(); PinAPtosend += PinAP[i] + "^"; } } reader1.Close(); conn1.Close(); messforward(PinAPtosend); PinAPtosend = "2|"; } catch { } }

public static void messforward(string message) {

foreach (DictionaryEntry Item in Listname) {

TcpClient messforwardSocket;

messforwardSocket = (TcpClient)Item.Value;

NetworkStream messforwardStream = messforwardSocket.GetStream(); Byte[] messforwardBytes = null;

messforwardBytes = Encoding.ASCII.GetBytes(message);

messforwardStream.Write(messforwardBytes, 0, messforwardBytes.Length); for (int i = 0; i < messforwardBytes.Length; i++)

{ messforwardBytes[i] = 000; } messforwardStream.Flush(); } }

public void messagecheckerinDBS() {

string APNameDest, PNameDest, PdestIP, PsenderIP, message, APNameSender, PNameSender;

MySqlCommand commandDB, commandDB2; bool dbcheckerflag = false;

MySqlDataReader reader2;

while (dbcheckerflag != true) {

conn2.Open();

commandDB = conn2.CreateCommand(); commandDB2 = conn3.CreateCommand();

commandDB.CommandText = "SELECT APNameDest, PNameDest, PdestIP, PsenderIP, message, APNameSender, PNameSender FROM message WHERE APnameDest = '" + APname + "' AND readstatus ='1'";

reader2 = commandDB.ExecuteReader();

(41)

if (APNameDest != null) {

try {

string messagetomyP = "3|" + APNameDest + "^" + PNameDest + "^" + PdestIP + "^" + PsenderIP + "^" + message + "^" + APNameSender + "^" + PNameSender;

//messforward(messagetomyP);//SALAH!!!!connect ke PdestIP lalu kirim message

TcpClient clientsend = new TcpClient();

NetworkStream streamsend = default(NetworkStream);

clientsend.Connect(PdestIP, 10002); streamsend = clientsend.GetStream();

//sending message

byte[] outStream = new byte[1048576];

outStream = System.Text.Encoding.ASCII.GetBytes(messagetomyP); streamsend.Write(outStream, 0, outStream.Length);

for (int j = 0; j < outStream.Length; j++) { outStream[j] = 000; } //closing connection streamsend.Flush(); Thread.Sleep(3000); streamsend.Dispose(); streamsend.Close(); clientsend.Close(); } catch { } //change readstatus conn3.Open();

//"UPDATE readstatus = '0' WHERE message = '...'"

commandDB2.CommandText = "UPDATE message SET readstatus = '0' WHERE message = '" + message + "'"; commandDB2.ExecuteNonQuery(); conn3.Close(); } else { } } conn2.Close(); Thread.Sleep(250); } }

public class handleClinet {

int count = 0; int counter = 0; TcpClient clientSocket; string clName, apname;

public static List<TimeSpan> ts = new List<TimeSpan>(); Hashtable clientsList;

bool flag = false; MySqlCommand commandHC; MySqlConnection connHC = new

MySqlConnection("Server=localhost;Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;");

public void startClient(TcpClient inClientSocket, string clientName, Hashtable cList, string APnamein) { this.clientSocket = inClientSocket; this.clName = clientName; this.apname = APnamein; this.clientsList = cList;

Thread ctThread = new Thread(doChat); ctThread.Start();

}

private void doChat() {

(42)

byte[] bytesFrom = new byte[1048576]; string dataFromClient = null;

string rCount = null;

Console.WriteLine("Client - " + clName + " in HC1.");

while (flag != true) {

try {

Stopwatch stw = new Stopwatch(); stw.Start();

NetworkStream networkStream = clientSocket.GetStream();

networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.TrimEnd('\n', '\r', '\0');

string[] splitchar = dataFromClient.Split('|'); string tcode = Convert.ToString(splitchar[1]); if (tcode == "*&*")

{

string tPname = Convert.ToString(splitchar[2]); endChat(tPname);

break; }

rCount = Convert.ToString(requestCount);

for (int i = 0; i < bytesFrom.Length; i++) { bytesFrom[i] = 000; } Agent.messforward(dataFromClient); //networkStream.Dispose(); //networkStream.Close(); networkStream.Flush(); stw.Stop();

string path = @"D:\Skripsi\Agent\Agent\bin\Debug\LogResponseTime.txt"; string path2 = @"D:\Skripsi\Agent\Agent\bin\Debug\LogData.txt"; try { if (count == 0) { File.Delete(path); File.Delete(path2); count++;

using (StreamWriter sw = File.CreateText(path)) {

sw.WriteLine("APname : " + apname);

sw.WriteLine(counter + " Response time : " + stw.Elapsed); }

using (StreamWriter sw2 = File.CreateText(path2)) {

sw2.WriteLine("APname : " + apname);

sw2.WriteLine(counter + " Data : " + dataFromClient); }

counter++; }

else {

using (StreamWriter sw = File.AppendText(path)) {

sw.WriteLine(counter + "Response time : " + stw.Elapsed); ts.Add(stw.Elapsed);

}

(43)

Console.WriteLine(e); }

} }

private void endChat(string tPname) {

try {

//matikan client dan stream, ubah flag, hapus database //flag = true;

Agent.Listname.Remove(tPname); Agent.listIP.Remove(tPname); connHC.Open();

commandHC = connHC.CreateCommand();

commandHC.CommandText = "DELETE FROM client WHERE user_name = '" + clName + "' and user_APname = '" + apname + "'";

commandHC.ExecuteNonQuery(); connHC.Close();

Console.WriteLine(clName + " leave room."); string farewell = "6|" + clName + " leave room"; Agent.messforward(farewell); } catch //(Exception e) { //Console.WriteLine(e); } }

public static void count_elapsed_time() {

TimeSpan sum = new TimeSpan(); Console.Write("counting..."); for (int i = 0; i < ts.Count;i++ ) {

sum += ts[i]; }

Console.Write("Done.\n");

string path = @"D:\Skripsi\Agent\Agent\bin\Debug\LogCount.txt"; using (StreamWriter sw = File.CreateText(path))

{ try {

sw.WriteLine("count : " + ts.Count); sw.WriteLine("sum elapse time : " + sum);

TimeSpan avg = TimeSpan.FromTicks(sum.Ticks / ts.Count); sw.WriteLine("avg elapse time : " + avg);

}

catch { } }

}

} //end class handleClinet

public class handleClinet2 {

TcpClient clientSocket; Hashtable clientsList; bool flag = false; MySqlCommand commandHC2; MySqlConnection connHC2 = new

MySqlConnection("Server=localhost;Port=3306;Database=DBPAP;Uid=root;Password=;default command timeout=20;");

MySqlDataReader readerHC2;

string APtexttosend, Ptexttosend, PIPtexttosend;

public void startClient(TcpClient inClientSocket, Hashtable cList) {

this.clientSocket = inClientSocket; this.clientsList = cList;

Thread ctThread = new Thread(doChat); ctThread.Start();

}

private void doChat() {

byte[] bytesFrom = new byte[1048576]; string dataFromClient = null;

(44)

while (flag != true) {

try {

NetworkStream networkStream = clientSocket.GetStream();

networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.TrimEnd('\n', '\r', '\0'); //Console.WriteLine(dataFromClient); if (dataFromClient == "1|*&*") { networkStream.Dispose(); networkStream.Close(); clientSocket.Close(); }

string[] splitchar = dataFromClient.Split('|'); string appcode = Convert.ToString(splitchar[0]); string data = Convert.ToString(splitchar[1]);

if (appcode == "5") {

string[] minorsplitchar = data.Split('^');

string minorappcode = Convert.ToString(minorsplitchar[0]); string minordata = Convert.ToString(minorsplitchar[1]);

if (minorappcode == "0") //this is AP list request {

getAPlist();

Byte[] sendBytes = null;

sendBytes = Encoding.ASCII.GetBytes(APtexttosend); networkStream.Write(sendBytes, 0, sendBytes.Length); //clean for next reuse

for (int i = 0; i < sendBytes.Length; i++) {

sendBytes[i] = 000; }

networkStream.Flush(); }

else if (minorappcode == "1") //this is P list in AP choosen {

getPlist(minordata); Byte[] sendBytes = null;

sendBytes = Encoding.ASCII.GetBytes(Ptexttosend); networkStream.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } networkStream.Flush(); getPIPlist(minordata); sendBytes = Encoding.ASCII.GetBytes(PIPtexttosend); networkStream.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{

sendBytes[i] = 000; }

networkStream.Flush(); }

else if (minorappcode == "2") //this is message and the attribute to write in DBS

{

(45)

} }

private void insertindatabase(string minordata) {

string[] atributmsg = minordata.Split('#');

string APNameDest = Convert.ToString(atributmsg[0]); string PNameDest = Convert.ToString(atributmsg[1]); string PDestIP = Convert.ToString(atributmsg[2]); string PSenderIP = Convert.ToString(atributmsg[3]); string message = Convert.ToString(atributmsg[4]); string APNameSender = Convert.ToString(atributmsg[5]); string PNameSender = Convert.ToString(atributmsg[6]); string readstatus = Convert.ToString(atributmsg[7]);

connHC2.Open();

commandHC2 = connHC2.CreateCommand();

commandHC2.CommandText = "INSERT INTO message VALUES ('" + APNameDest + "', '" + PNameDest + "', '" + PDestIP + "', '" + PSenderIP + "', '" + message + "', '" + APNameSender + "', '" + PNameSender + "', '1')";

commandHC2.ExecuteNonQuery(); connHC2.Close();

}

private void getPIPlist(string minordata) {

//take PIP ini DBS connHC2.Open();

commandHC2.CommandText = "SELECT user_IP FROM client WHERE user_APname = '" + minordata + "'";

readerHC2 = commandHC2.ExecuteReader();

PIPtexttosend = null; while (readerHC2.Read()) {

for (int i = 0; i < readerHC2.FieldCount; i++) { PIPtexttosend += readerHC2.GetString(i) + "#"; } } readerHC2.Close(); connHC2.Close(); }

private void getPlist(string minordata) {

connHC2.Open();

commandHC2 = connHC2.CreateCommand(); //take usernames ini DBS

commandHC2.CommandText = "SELECT user_name FROM client WHERE user_APname = '" + minordata + "'";

readerHC2 = commandHC2.ExecuteReader();

Ptexttosend = null; while (readerHC2.Read()) {

for (int i = 0; i < readerHC2.FieldCount; i++) { Ptexttosend += readerHC2.GetString(i) + "#"; } } readerHC2.Close(); connHC2.Close(); }

private void getAPlist() {

connHC2.Open();

commandHC2 = connHC2.CreateCommand();

commandHC2.CommandText = "SELECT AP_name FROM agent"; readerHC2 = commandHC2.ExecuteReader();

while (readerHC2.Read()) {

for (int i = 0; i < readerHC2.FieldCount; i++) {

APtexttosend += readerHC2.GetString(i) + "#"; }

(46)

}

readerHC2.Close(); connHC2.Close(); }

} //end class handleClinet2 }//end namespace

(47)

LAMPIRAN VIII

(48)

a. FILE NAME : Chat.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Threading; namespace Client {

public partial class Chat : Form {

TcpClient client10011; NetworkStream stream10011; string namedest, ipdest; Form1 form1;

Thread listening;

public Chat(Form1 form1_in, string namedest_in, string ipdest_in) { InitializeComponent(); form1 = form1_in; ipdest = ipdest_in; namedest = namedest_in; grp_chat.Text += namedest;

client10011 = new TcpClient();

writeinhistory("Establishing connection..."); Thread.Sleep(3000);

connecting();

listening = new Thread(new ThreadStart(listening10011)); listening.Start();

}

private void connecting() {

client10011.Connect(ipdest, 10011); writeinhistory("Connected!"); }

private void listening10011() {

for (; ; ) {

byte[] inStream = new byte[10025]; stream10011 = client10011.GetStream();

stream10011.Read(inStream, 0, (int)client10011.ReceiveBufferSize); string texttowrite = System.Text.Encoding.ASCII.GetString(inStream); texttowrite = texttowrite.TrimEnd('\0','\r','\n'); if (texttowrite == "*&*") { closethis(); } else { writeinhistory(texttowrite); } }

(49)

txb_histori.SelectionStart = txb_histori.Text.Length; txb_histori.ScrollToCaret();

txb_histori.Refresh(); }

private void btn_send_Click(object sender, EventArgs e) {

stream10011 = client10011.GetStream(); string texttosend;

texttosend = form1.P1.Pname + " : " + txb_write.Text + Environment.NewLine;

Byte[] sendBytes = Encoding.ASCII.GetBytes(texttosend); stream10011.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } stream10011.Flush(); writeinhistory(texttosend); txb_write.Text = ""; txb_write.Focus(); } void closethis() { form1.chatflag = false; invokeclosethis(); }

private void invokeclosethis() { if (InvokeRequired) { this.Invoke(new Action(invokeclosethis)); return; } this.Close(); }

private void btn_end_Click(object sender, EventArgs e) {

try {

string texttosend = "*&*";

stream10011 = client10011.GetStream();

Byte[] sendBytes = Encoding.ASCII.GetBytes(texttosend); stream10011.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } stream10011.Flush(); Thread.Sleep(1000); closethis(); } catch {

MessageBox.Show("Error exit chat form"); }

} } }

b. FILE NAME : Chat_init.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

(50)

using System.Windows.Forms; using System.Net.Sockets; using System.Threading;

namespace Client {

public partial class Chat_init : Form { TcpListener listener10011; TcpClient client10011; TcpClient client10001; NetworkStream stream10011; NetworkStream stream10001; Form1 form1; string IPdest;

public bool listenflag, listenflag2; Thread t_listening10011;

public Chat_init(Form1 form1_in, string IPdest_in, string namedest_in) { InitializeComponent(); IPdest = IPdest_in; form1 = form1_in; grp_chat.Text += namedest_in; calldest(); Thread.Sleep(500);

listener10011 = new TcpListener(form1.P1.localIPs[0], 10011); client10011 = new TcpClient();

listener10011.Start();

writeinhistory("Establishing connection...");

t_listening10011 = new Thread(listeningto10011); t_listening10011.Start();

}

private void listeningto10011() {

string texttowrite = null;

while ((listenflag != true)) {

client10011 = listener10011.AcceptTcpClient(); writeinhistory("Connected!");

byte[] bytesFrom = new byte[10025]; while (listenflag2 != true)

{ try { stream10011 = client10011.GetStream(); stream10011.Read(bytesFrom, 0, (int)client10011.ReceiveBufferSize); texttowrite = Encoding.ASCII.GetString(bytesFrom); texttowrite = texttowrite.TrimEnd('\0', '\r', '\n'); if (texttowrite == "*&*") {

(51)

bytesFrom[i] = 000; } stream10011.Flush(); } catch { } } } }

private void writeinhistory(string texttowrite) {

if (InvokeRequired) {

this.Invoke(new Action<string>(writeinhistory), new object[] { texttowrite}); return;

}

txb_histori.Text += texttowrite + Environment.NewLine; txb_histori.Select(txb_histori.Text.Length - 1, 0); txb_histori.SelectionStart = txb_histori.Text.Length; txb_histori.ScrollToCaret();

txb_histori.Refresh(); }

private void calldest() {

try {

client10001 = new TcpClient(); client10001.Connect(IPdest, 10001); stream10001 = client10001.GetStream();

string texttosend = form1.P1.Pname + "|" + form1.P1.PIP;

Byte[] sendBytes = Encoding.ASCII.GetBytes(texttosend); stream10001.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } stream10001.Flush(); Thread.Sleep(500); client10001.Close(); }

catch { MessageBox.Show("Error calling destination"); } }

private void btn_send_Click(object sender, EventArgs e) {

stream10011= client10011.GetStream(); string texttosend;

texttosend = form1.P1.Pname + " : " + txb_write.Text + Environment.NewLine;

Byte[] sendBytes = Encoding.ASCII.GetBytes(texttosend); stream10011.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } stream10011.Flush(); writeinhistory(texttosend); txb_write.Text = ""; txb_write.Focus(); } void closethis() {

(52)

t_listening10011.Interrupt(); t_listening10011.Abort(); listener10011.Stop(); form1.chatflag = false; this.Close(); }

private void btn_end_Click(object sender, EventArgs e) {

try {

string texttosend = "*&*";

stream10011 = client10011.GetStream();

Byte[] sendBytes = Encoding.ASCII.GetBytes(texttosend); stream10011.Write(sendBytes, 0, sendBytes.Length); for (int i = 0; i < sendBytes.Length; i++)

{ sendBytes[i] = 000; } stream10011.Flush(); Thread.Sleep(7000); closethis(); } catch { } } } }

c. FILE NAME : Form_AProom.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.Diagnostics; namespace Client {

public partial class Form_AProom : Form {

public Form1 mainForm; bool flag = false;

System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); NetworkStream Stream = default(NetworkStream);

Thread t_listenclient;

string plaintext, kript1, kript2, texttosend;

public Form_AProom(Form1 imainForm) {

InitializeComponent(); mainForm = imainForm;

(53)

texttosend = "4|" + plaintext; sendmess(texttosend);

texttosend = mainForm.P1.Pname;

t_listenclient = new Thread(new ThreadStart(listenclient)); t_listenclient.Start();

}

private void btn_end_Click(object sender, EventArgs e) { sendmess("1|*&*|"+mainForm.P1.Pname); mainForm.Visible = true; try { flag = true; Stream.Close(); t_listenclient.Interrupt(); t_listenclient.Abort(); } catch {

//MessageBox.Show("Exiting AP not succesfully"); }

this.Close(); }

private void invokelsbroommember(string data) {

if (InvokeRequired) {

this.Invoke(new Action<string>(invokelsbroommember), new object[] { data }); return;

}

string[] dataarr = data.Split('^'); string str;

lsb_room_member.Items.Clear();

for (int i = 0; i < dataarr.Length; i++) {

str = dataarr[i];

lsb_room_member.Items.Add(str); }

}

public void writeinhistory(string mesg) {

if (InvokeRequired) {

this.Invoke(new Action<string>(writeinhistory), new object[] { mesg }); return;

}

txb_histori.Text += mesg + Environment.NewLine; txb_histori.Select(txb_histori.Text.Length - 1, 0); txb_histori.SelectionStart = txb_histori.Text.Length; txb_histori.ScrollToCaret();

txb_histori.Refresh(); }

private void btn_send_Click(object sender, EventArgs e) {

plaintext = mainForm.P1.Pname + " : " + txb_write.Text; texttosend = "1|" + plaintext;

sendmess(texttosend); txb_write.Text = ""; txb_write.Focus(); }

private void sendmess(string mess) {

byte[] outStream = new byte[1048576];

outStream = System.Text.Encoding.ASCII.GetBytes(mess); Stream.Write(outStream, 0, outStream.Length);

Stream.Flush();

for (int i = 0; i < outStream.Length; i++) {

outStream[i] = 000; }

(54)

private void listenclient() {

while (flag != true) {

try {

int buffSize = 0;

byte[] inStream = new byte[1048576]; buffSize = clientSocket.ReceiveBufferSize; Stream.Read(inStream, 0, buffSize);

string textfromAP = System.Text.Encoding.ASCII.GetString(inStream); textfromAP = textfromAP.TrimEnd('\n', '\r', '\0');

//MessageBox.Show("textfromAP : " + textfromAP); try

{

string[] splitchar = textfromAP.Split('|'); string appcode = Convert.ToString(splitchar[0]); string data = Convert.ToString(splitchar[1]); if (appcode == "1") { if (data == "*&*") { } else { writeinhistory(data); } } else if (appcode == "2") { //"2|"=ke lsb member invokelsbroommember(data); } else if (appcode == "6") { //"6|"=leave room writeinhistory(data); } } catch (Exception e) { MessageBox.Show(e + ""); } } catch {

//MessageBox.Show("Error in listenclient : Not closed properly"); }

} }

private void btn_browse_Click(object sender, EventArgs e) {

RDBForm rdbf = new RDBForm(this); rdbf.Show();

}

private void Form_AProom_FormClosing(object sender, FormClosingEventArgs e) {

this.Dispose(); }

} }

(55)

using System.Net; using System.Threading;

using System.Runtime.CompilerServices;

namespace Client {

public partial class Form1 : Form {

public Client P1 = new Client();

Thread t_getBC, t_sendBC, t_listen, t_listen2; Socket socksend, sockget;

public TcpListener socklisten, socklisten2; NetworkStream sockstream, sockstream2; public TcpClient sockclient, sockclient2; IPEndPoint iep;

List<string> listPname = new List<string>(); List<string> listPIP = new List<string>(); List<string> listAPname = new List<string>(); List<string> listAPIP = new List<string>();

string tempAPsname, tempAPsIP, tempPsname, tempPsIP; public int index;

public bool listenflag, listenflag2, chatflag; private System.Object lockthis = new System.Object();

public Form1() {

InitializeComponent();

this.Size = new System.Drawing.Size(290,135); }

private void btn_login_Click(object sender, EventArgs e) {

//input data dan setting parameter P1.Pname = txb_nama.Text;

P1.mode = 1;

grp_Login.Visible = false; grp_pilihAP.Visible = true;

this.grp_pilihAP.Location = new System.Drawing.Point(12, 12); this.Text = "Choose AP here";

this.Size = new System.Drawing.Size(290,250); lbl_welcomeAP.Text += P1.Pname;

lbl_welcomeP.Text += P1.Pname;

//jalankan servis socket P1.getIPkomputer();

t_getBC = new Thread(getbroadcast); t_getBC.Start();

t_sendBC = new Thread(sendbroadcast); t_sendBC.Start();

t_listen = new Thread(listener); t_listen.Start();

t_listen2 = new Thread(listener2); t_listen2.Start();

}

private void btn_users_Click(object sender, EventArgs e) {

this.Text = "Choose someone to chat"; grp_pilihAP.Visible = false;

grp_pilihP.Visible = true;

this.grp_pilihP.Location = new System.Drawing.Point(12, 12); P1.mode = 2;

(56)

listAPname.Clear(); btn_join.Enabled = false; }

private void btn_APs_Click(object sender, EventArgs e) {

this.Text = "Choose AP here"; grp_pilihAP.Visible = true; grp_pilihP.Visible = false;

this.grp_pilihAP.Location = new System.Drawing.Point(12, 12); P1.mode = 1; lsb_Plist.Items.Clear(); listPname.Clear(); listPIP.Clear(); btn_chat.Enabled = false; }

private void btn_join_Click(object sender, EventArgs e) {

P1.APdestIP = listAPIP[index]; P1.APname = listAPname[index];

//buka form AP

Form_AProom AProom = new Form_AProom(this); AProom.Show();

this.Visible = false; }

private void btn_chat_Click(object sender, EventArgs e) {

//ambil IP tujuan string IPdest, namedest;

IPdest = listPIP[lsb_Plist.SelectedIndex]; namedest = listPname[lsb_Plist.SelectedIndex];

//buka form

if (chatflag != true) {

Chat_init Chatting = new Chat_init(this, IPdest, namedest); Chatting.Show();

chatflag = true; }

else { } }

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { t_getBC.Interrupt(); t_getBC.Abort(); t_sendBC.Abort(); t_listen.Interrupt(); t_listen.Abort(); t_listen2.Interrupt(); t_listen2.Abort();

(57)

catch { } }

public void sendbroadcast() {

//kirim broadcast di jaringan lokal

socksend = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 10001); string tekstosend = "2|" + P1.Pname + "|" + P1.PIP;

byte[] data = Encoding.ASCII.GetBytes(tekstosend);

socksend.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); for (; ; ) { socksend.SendTo(data, iep1); Thread.Sleep(750); } }

public void getbroadcast() {

sockget = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

iep = new IPEndPoint(IPAddress.Any, 10001); sockget.Bind(iep);

EndPoint ep = (EndPoint)iep; byte[] data = new byte[1024];

for (; ; ) {

int recv = sockget.ReceiveFrom(data, ref ep);

P1.stringData = Encoding.ASCII.GetString(data, 0, recv); data = new byte[1024];

recv = sockget.ReceiveFrom(data, ref ep);

P1.stringData= Encoding.ASCII.GetString(data, 0, recv); P1.stringData = P1.stringData.TrimEnd('\0');

string[] splitchar = P1.stringData.Split('|'); P1.code = Convert.ToString(splitchar[0]); checkBCmessage();

} }

private void checkBCmessage() {

if (P1.code == "1" && P1.mode == 1) //untuk menerima dan menganalisa BC message dari AP

{

string[] splitchar = P1.stringData.Split('|'); tempAPsname = Convert.ToString(splitchar[1]); tempAPsIP = Convert.ToString(splitchar[4]);

cekAP(tempAPsname); }

else if (P1.code == "2" && P1.mode == 2) //untuk menerima dan menganalisa BC message dari P

{

string[] splitchar = P1.stringData.Split('|'); tempPsname = Convert.ToString(splitchar[1]); tempPsIP = Convert.ToString(splitchar[2]); if (tempPsname != P1.Pname) { cekP(tempPsname); } else { } } else { }

(58)

}

private void cekP(string tempPsname) {

lock (this) {

//jika listPname masih kosong maka yang diterima pertama langsung diinisialisasi if (listPname.Count == 0) { inserttolsbPlist(tempPsname); } bool b = listPname.Any(tempPsname.Contains); if (b == false) { inserttolsbPlist(tempPsname); } } }

private void inserttolsbPlist(string tempPsname) {

//proses invoke untuk menulis di UI thread lsb_Plist if (InvokeRequired)

{

this.Invoke(new Action<string>(inserttolsbPlist), new object[] { tempPsname });

return; }

lsb_Plist.Items.Add(tempPsname); //masukkan data lainnya di list listPname.Add(tempPsname); listPIP.Add(tempPsIP); }

private void cekAP(string tempAPsname) {

//jika listAPname masih kosong maka yang pertama langsung diinisialisasi if (listAPname.Count == 0) { inserttolsbAPlist(tempAPsname); } bool b = listAPname.Any(tempAPsname.Contains); if (b == false) { inserttolsbAPlist(tempAPsname); } }

private void inserttolsbAPlist(string tempAPsname) {

//proses invoke untuk menulis di UI thread di lsbAPlist if (InvokeRequired)

{

this.Invoke(new Action<string>(inserttolsbAPlist), new object[] { tempAPsname });

(59)

//membuat listener untuk menerima koneksi tcp socklisten = new TcpListener(P1.localIPs[0], 10001); sockclient = default(TcpClient);

socklisten.Start();

string dataFromClient = null;

while ((listenflag != true)) {

sockclient = socklisten.AcceptTcpClient(); byte[] bytesFrom = new byte[10025];

try { sockstream = sockclient.GetStream(); sockstream.Read(bytesFrom, 0, (int)sockclient.ReceiveBufferSize); dataFromClient = Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.TrimEnd('\0'); //flush bytesFrom

for (int i = 0; i < dataFromClient.Length; i++) { bytesFrom[i] = 000; } sockstream.Flush(); invokingchat(dataFromClient); } catch { } } }

public void listener2() {

//membuat listener untuk menerima koneksi tcp

socklisten2 = new TcpListener(P1.localIPs[0], 10002); sockclient2 = default(TcpClient);

socklisten2.Start();

string dataFromClient2 = null;

while ((listenflag2 != true)) {

sockclient2 = socklisten2.AcceptTcpClient(); byte[] bytesFrom2 = new byte[10025];

try { sockstream2 = sockclient2.GetStream(); sockstream2.Read(bytesFrom2, 0, (int)sockclient2.ReceiveBufferSize); dataFromClient2 = Encoding.ASCII.GetString(bytesFrom2); dataFromClient2 = dataFromClient2.TrimEnd('\0'); //flush bytesFrom2

for (int i = 0; i < dataFromClient2.Length; i++) { bytesFrom2[i] = 000; } sockstream2.Flush(); invokingmessagereceiverform(dataFromClient2); } catch { } } }

private void invokingmessagereceiverform(string dataFromClient2) {

(60)

{

this.Invoke(new Action<string>(invokingmessagereceiverform), new object[] { dataFromClient2 });

return; }

MessageBox.Show("Got a message");

MsgRcvr msgreceiver = new MsgRcvr(dataFromClient2, this); msgreceiver.Show();

}

private void invokingchat(string dataFromClient) {

if (InvokeRequired) {

this.Invoke(new Action<string>(invokingchat), new object[] { dataFromClient });

return; }

string tempIPdest = null; string tempnamedest = null;

string[] splitchar = P1.stringData.Split('|'); tempIPdest = Convert.ToString(splitchar[2]); tempnamedest = Convert.ToString(splitchar[1]);

Chat chatting = new Chat(this, tempnamedest, tempIPdest); chatting.Show();

}

private void lsb_APlist_SelectedIndexChanged(object sender, EventArgs e) { btn_join.Enabled = true; if (lsb_APlist.SelectedIndex == -1) { btn_join.Enabled = false; } index = lsb_APlist.SelectedIndex; }

private void lsb_Plist_SelectedIndexChanged(object sender, EventArgs e) { btn_chat.Enabled = true; if (lsb_Plist.SelectedIndex == -1) { btn_chat.Enabled = false; } index = lsb_Plist.SelectedIndex; } }

public class Client {

//inisialisasi atribut class

public string Pname, PIP, stringData, code, APdestIP, APname; IPHostEntry ipEntry;

public IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

(61)

} }

e. FILE NAME : Msgrcvr.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; namespace Client {

public partial class MsgRcvr : Form {

string APNameDest, PNameDest, PdestIP, PsenderIP, message, APNameSender, PNameSender; Form1 frm1;

public MsgRcvr(string dataFromClient, Form1 form1_in) {

InitializeComponent(); frm1 = form1_in;

messagesplitandcheck(dataFromClient); }

private void messagesplitandcheck(string dataFromClient) {

//string messagetomyP = "3|" + APNameDest + "^" + PNameDest + "^" + PdestIP + "^" +

//PsenderIP + "^" + message + "^" + APNameSender + "^" + PNameSender; string[] splitchar = dataFromClient.Split('|');

string datas = Convert.ToString(splitchar[1]); string[] splitchar2 = datas.Split('^');

APNameDest = Convert.ToString(splitchar2[0]); PNameDest = Convert.ToString(splitchar2[1]); PdestIP = Convert.ToString(splitchar2[2]); PsenderIP = Convert.ToString(splitchar2[3]); message = Convert.ToString(splitchar2[4]); APNameSender = Convert.ToString(splitchar2[5]); PNameSender = Convert.ToString(splitchar2[6]); lbl_msgto.Text += PNameSender; lbl_inAP.Text += APNameSender; txb_msgfrom.Text += message; }

private void btn_replyask_Click(object sender, EventArgs e) { txb_write.Visible = true; btn_cancel_msg.Visible = true; btn_send_msg.Visible = true; btn_replyask.Enabled = false; btn_cancelask.Enabled = false;

this.Size = new System.Drawing.Size(500, 335);

this.grp_message.Size = new System.Drawing.Size(470, 290); }

private void btn_cancelask_Click(object sender, EventArgs e) {

this.Dispose(); this.Close(); }

(62)

private void btn_cancel_msg_Click(object sender, EventArgs e) { txb_write.Visible = false; btn_send_msg.Visible = false; btn_cancel_msg.Visible = false; btn_cancelask.Enabled = true; btn_replyask.Enabled = true;

this.Size = new System.Drawing.Size(500, 200);

this.grp_message.Size = new System.Drawing.Size(470, 150); }

private void btn_send_msg_Click(object sender, EventArgs e) {

if (txb_write.Text != null) {

string texttosend = "5|2^" + APNameDest + "#" + PNameDest + "#" + PsenderIP + "#" + PdestIP + "#" + txb_write.Text + "#" + frm1.P1.APname + "#" + frm1.P1.Pname + "#1";

TcpClient client = new TcpClient();

NetworkStream stream = default(NetworkStream);

client.Connect(frm1.P1.APdestIP, 11111); stream = client.GetStream();

byte[] outStream = new byte[10025];

outStream = System.Text.Encoding.ASCII.GetBytes(texttosend); stream.Write(outStream, 0, outStream.Length);

stream.Flush();

for (int i = 0; i < outStream.Length; i++) { outStream[i] = 000; } texttosend = null; MessageBox.Show("Message sent."); stream.Close(); this.Close(); } else {

MessageBox.Show("Write something please."); }

} } }

f. FILE NAME : RDBForm.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

(63)

public TcpClient client = new TcpClient();

public NetworkStream stream = default(NetworkStream); public string attAPdest, attPdest, attPIPdest;

public RDBForm(Form_AProom aproom_in) {

InitializeComponent(); aproom = aproom_in;

//request get data mode = 0 from DBS via AP

client.Connect(aproom.mainForm.P1.APdestIP, 11111); stream = client.GetStream();

this.Text = "AP list"; getdata(mode);

}

private void getdata(int mode) {

if (mode == 0) //request get data of all existing AP from DBS via AP {

string texttosend = "5|" + mode + "^"; sendmess(texttosend);

texttosend = null;

try {

byte[] inStream = new byte[10025];

stream.Read(inStream, 0, (int)client.ReceiveBufferSize);

string returndata = System.Text.Encoding.ASCII.GetString(inStream); for (int i = 0; i < inStream.Length; i++)

{ inStream[i] = 000; } stream.Flush(); invoketolsb_ap(returndata); } catch {

MessageBox.Show("Error getting data of existing AP. This form will close.");

this.Close(); }

}

else if (mode == 1) //request get data of all existing P in AP choosen from DBS via AP

{

string texttosend = "5|" + mode + "^" + attAPdest; sendmess(texttosend);

texttosend = null;

try {

byte[] inStream = new byte[10025];

stream.Read(inStream, 0, (int)client.ReceiveBufferSize);

string returndata = System.Text.Encoding.ASCII.GetString(inStream); returndata = returndata.TrimEnd('\n', '\0', '\r');

for (int i = 0; i < inStream.Length; i++) {

inStream[i] = 000; }

stream.Flush();

stream.Read(inStream, 0, (int)client.ReceiveBufferSize);

string returndata2 = System.Text.Encoding.ASCII.GetString(inStream); returndata2 = returndata2.TrimEnd('\n', '\0', '\r');

invoketolsb_p(returndata); invoketolistPIP(returndata2); }

(64)

catch {

MessageBox.Show("Error getting existing P in " + attAPdest + ". Maybe AP is inactive.");

this.Close(); }

} }

private void invoketolistPIP(string returndata2) {

string[] splitchar = returndata2.Split('#'); string temp = null;

for (int i = 0; i < splitchar.Length - 1; i++) {

temp = splitchar[i].ToString(); list_PIP.Add(temp);

} }

private void invoketolsb_p(string returndata) {

string[] splitchar = returndata.Split('#'); string temp = null;

for (int i = 0; i < splitchar.Length; i++) { temp = splitchar[i].ToString(); if (temp != null) { lsb_Plist.Items.Add(temp); } } }

private void invoketolsb_ap(string returndata) {

string[] splitchar = returndata.Split('#'); string temp = null;

for (int i = 0; i < splitchar.Length; i++) {

temp = splitchar[i].ToString(); lsb_APlist.Items.Add(temp); }

}

private void sendmess(string mess) {

byte[] outStream = new byte[10025];

outStream = System.Text.Encoding.ASCII.GetBytes(mess); stream.Write(outStream, 0, outStream.Length);

stream.Flush();

for (int i = 0; i < outStream.Length; i++) {

(65)

mode = 1; //mode = 1 for Plist mode this.Text = " Client list";

getdata(mode);

btn_OKAP.Enabled = false; }

private void btn_CancelAP_Click(object sender, EventArgs e) {

//close this form this.Close(); }

private void btn_OKP_Click(object sender, EventArgs e) {

//show grp_message

attPdest = lsb_Plist.SelectedItem.ToString(); int index = lsb_Plist.SelectedIndex;

attPIPdest = list_PIP[index].ToString(); grp_RDB2.Visible = false;

grp_message.Visible = true;

this.grp_message.Location = new System.Drawing.Point(12, 12); this.Size = new System.Drawing.Size(500, 210);

this.Text = "Send message here";

mode = 2; //mode = 2 for message mode btn_OKP.Enabled = false;

}

private void btn_CancelP_Click(object sender, EventArgs e) {

//show grp_RDB1

grp_RDB1.Visible = true; grp_RDB2.Visible = false;

this.grp_RDB1.Location = new System.Drawing.Point(12, 12); this.Text = "AP list";

mode = 0; //mode = 0 for APlist mode getdata(mode);

lsb_APlist.Items.Clear(); btn_OKP.Enabled = false; }

private void btn_cancel_msg_Click(object sender, EventArgs e) {

//show grp_RDB2

grp_message.Visible = false; grp_RDB2.Visible = true;

this.grp_RDB2.Location = new System.Drawing.Point(12, 12); this.Size = new System.Drawing.Size(265, 250);

this.Text = " Client list";

mode = 1; //mode = 1 for Plist mode lsb_Plist.Items.Clear();

getdata(mode); }

private void btn_send_msg_Click(object sender, EventArgs e) {

if (txb_write.Text != null) {

string texttosend = "5|" + mode + "^" + attAPdest + "#" + attPdest + "#" + attPIPdest + "#" + aproom.mainForm.P1.PIP + "#" + txb_write.Text + "#" +

aproom.mainForm.P1.APname + "#" + aproom.mainForm.P1.Pname + "#1"; sendmess(texttosend); texttosend = null; } else { } MessageBox.Show("Message sent."); this.Close(); }

(66)

private void lsb_APlist_SelectedIndexChanged(object sender, EventArgs e) { btn_OKAP.Enabled = true; if (lsb_APlist.SelectedIndex == -1) { btn_OKAP.Enabled = false; } }

private void lsb_Plist_SelectedIndexChanged(object sender, EventArgs e) { btn_OKP.Enabled = true; if (lsb_Plist.SelectedIndex == -1) { btn_OKP.Enabled = false; } }

private void RDBForm_FormClosing(object sender, FormClosingEventArgs e) {

string texttosend = "1|*&*"; sendmess(texttosend); texttosend = null; try { stream.Close(); } catch { } } } }

(67)

LAMPIRAN IX

(68)

Database DBPAP mempunyai tiga tabel yaitu agent, message dan client.

a. Entity Relationship Diagram (ERD)

b. Tabel ap

Agent

AP_name

AP_IP

(69)

d. Tabel message

Message

AP_NameDest

P_NameDest

P_destIP

P_senderIP

Message

File

AP_NameSender

P_NameSender

Info

Readstatus

e. Instalasi MySQL

Dalam melakukan instalasi MySQL dalam bundle XAMPP, urutan langkah yang

dilakukan adalah sebagai berikut.

1. Mengunduh installer XAMPP dari http://xampp.en.softonic.com/download.

2. Jalankan installerpada PC.

3. Pilih ‘Next’ pada Form1.

4. Pilih lokasi instalasi MySQL. Untuk sistem operasi yang memiliki User Access

Control (UAC), lakukan instalasi di drive yang berbeda dengan sistem operasi.

Setelah menentukan lokasi, pilih Next.

5. Pilih layanan lain yang ingin diinstal. Pilih Install.

(70)

LAMPIRAN X

(71)

Aplikasi agent berupa aplikasi console. Oleh karena itu, tampilan aplikasi agent adalah

sebagai berikut.

(72)

LAMPIRAN XI

(73)

Pada aplikasi client terdapat lima form. Form-form tersebut adalah form1, chat_init,

chat, form_AProom, RDBForm dan MsgRcvr. Form chat_init dan chat memiliki tampilan

yang sama. Tampilan dari form-form tersebut digambarkan sebagai berikut.

1. Tampilan form1

Tampilan form1 terdiri dari tiga bagian yaitu :

a. Login

b. Pemilihan Agent

(74)

2. Tampilan chat_init dan chat

(75)

4. Tampilan RDBForm

Tampilan RDBForm terdiri dari 3 bagian, yaitu :

a. Daftar Agent

b. Daftar client dalam Agent terpilih

(76)
(77)

LAMPIRAN XII

(78)

Untuk mengaktifkan sistem, diawali dengan menjalankan aplikasi agent. Aplikasi agent

akan meminta nama agent dan IP DBS.

Setelah dua variabel tersebut dimasukkan, maka agent akan menjalankan

layanan-layanan yang dimilikinya.

Jika layanan agent telah berjalan, maka sistem telah siap digunakan oleh program

client. Program client diawali dengan melakukan login ke dalam sistem terlebih dahulu.

Dengan menekan tombol ‘Login’, maka pengguna dapat memilih agent yang tersedia

atau pun pengguna lain dalam jaringan lokalnya.

(79)

Setelah menekan tombol ‘Join’, maka aktivitas pengguna akan dikelola oleh agent

melalui form aproom. Melalui form ini, pengguna dapat melakukan komunikasi data melalui

fasilitas chat yang disediakan.

Untuk keluar dari pengelolaan agent, pengguna dapat menggunakan tombol ‘Exit’. Pengguna

yang keluar akan kembali ke menu pemilihan agent.

Referensi

Dokumen terkait

Proses perancangan pembuatan maket diawali dengan membuat sketsa bentuk dari tiga ruangan tersebut, mendatangi lokasi sekaligus melakukan pengukuran dalam setiap ruang

Quantum Infra Solusindo adalah dapat mengoptimalkan Sistem Informasi Rumah Sakit “Medinfras” dengan subsistem penunjang medis laboratorium yang telah diperbaharui

- Perancangan struktur menu untuk aplikasi untuk penjualan sparepart difajar motor ini menggunakan Login sebagai awal untuk hak akses, memiliki fungsi untuk

Tujuan bisnis yang akan dilakukan pada penelitian ini adalah bagaimana melakukan pengelompokan nilai Mahasiswa UMN angkatan 2015 Program Studi Sistem Informasi

Ketua Program Studi Sistem Informasi Universitas Multimedia Nusantara, Bapak Wira Munggana, serta para dosen yang telah memberikan nasihat dan semangat dikala

Sebelum terhubung via telepon dengan penyiar program “Woman Eye Shadow”, penulis ditelepon oleh operator di studio untuk memastikan penulis sudah siap melakukan reportase.

Maka terpilihlah Aksi Tanam dan Pelihara 25 Pohon Selama Hidup sebagai topik Tugas Akhir penulis yang terlebih dahulu menjadi sebuah aksi resmi dari Kementerian

Pengujian dilakukan kepada pemilik Travel Agent di Lampung, dengan hasil bahwa sistem rekomendasi ini mampu memberikan rekomendasi tempat wisata yang tepat sesuai