SERVER.
Fungsi ConnectUser.
Fungsi dibawah ini berfungsi untuk melakukan pemeriksaan jika
username sudah ada di client.
Jika ada maka kirim REFUSE message, jika
tidak maka konfirmasi dengan JOIN.
private void ConnectUser(string
userName, UserConnection sender)
{
if
(clients.Contains(userName))
{
ReplyToSender("REFUSE", sender);
}
else
{
sender.Name = userName; UpdateStatus(userName + " has joined the chat.");
clients.Add(userName, sender);
ReplyToSender("JOIN", sender);
SendToClients("CHAT|" + sender.Name + " has joined the chat.", sender);
}
}
Fungsi DisconnectUser
Fungsi dibawah ini memeriksa client bahwa sender telah
disconnect dari chat dan menghilangkan namanya dari Hashtable Client.
private void DisconnectUser(UserConnection
sender)
{
UpdateStatus(sender.Name + " has left the chat.");
SendToClients("CHAT|"
+ sender.Name + " has left the chat.",
sender);
clients.Remove(sender.Name);
}
Fungsi DoListen()
Fungsi ini digunakan untuk sebuah thread listener background
untuk membaca message yang datang.
Fungsi ini menggunakan class TcpListener untuk me-Listen
dari koneksi-koneksi yang baru.Membuat sebuah koneksi user baru TcpClient
sebagai hasil dari metod TcpListener.AcceptTcpClient().Membuat sebuah event
handler untuk komunikasi dari UserConnection.
private void DoListen()
{
try {
listener = new
TcpListener(System.Net.IPAddress.Any,
PORT_NUM);
listener.Start();
do
{
UserConnection client = new UserConnection(listener.AcceptTcpClient());
client.LineReceived
+= new LineReceive(OnLineReceived);
UpdateStatus("new connection found: waiting for log-in");
}while(true);
}
catch
(Exception e)
{
MessageBox.Show(e.ToString
());
}
}
Fungsi ListUsers
Fungsi ini
melakukan list terhadap seluruh nama client dan mengirimkannya ke user yang
meminta user list.Semua masukan dari Hashtable adalah UserConnection sehingga
mungkin untuk menetapkannya secara aman.Menggunakan fungsi ReplyToSender untuk
mengirimkan daftar(list) dari user.
private void ListUsers(UserConnection
sender)
{
UserConnection
client;
string
strUserList;
UpdateStatus("Sending
" + sender.Name + " a list of users
online.");
strUserList = "LISTUSERS";
foreach(DictionaryEntry entry in
clients)
{
client = (UserConnection)
entry.Value;
strUserList = strUserList + "|" + client.Name;
}
ReplyToSender(strUserList, sender);
}
Fungsi
ReplyToSender
Fungsi ini
berguna untuk mengirim sebuah response ke sender.Response dalam hal ini adalah
sebuah string message yang dikirim pada fungsi ini.
private void ReplyToSender(string
strMessage, UserConnection sender)
{
sender.SendData(strMessage);
}
Fungsi SendChat
Fungsi ini digunakan untuk mengirimkan sebuah message ke
seluruh client kecuali sender.
private void SendChat(string
message, UserConnection sender)
{
UpdateStatus(sender.Name + ": " + message);
SendToClients("CHAT|"
+ sender.Name + ": " + message,
sender);
}
Fungsi SendToClients
Fungsi ini digunakan untuk mengirimkan sebuah message ke
semua client yang terikat kecuali sender.
// This subroutine sends a message to all attached clients except the
sender.
private void SendToClients(string
strMessage, UserConnection sender)
{
UserConnection
client;
foreach(DictionaryEntry entry in
clients)
{
client = (UserConnection)
entry.Value;
if
(client.Name != sender.Name)
{
client.SendData(strMessage);
}
}
}
Fungsi Broadcast
Fungsi ini untuk
mengirimkan sebuah message kesemua client yang terikat.
private void Broadcast(string
strMessage)
{
UserConnection
client;
foreach(DictionaryEntry entry in
clients)
{
client = (UserConnection)
entry.Value;
client.SendData(strMessage);
}
}
Fungsi
btnBroadcast_Click
Fungsi ini
mengirimkan sebuah isi dari broadcast textbox ke semua client kemudian jika
textboxnya tidak kosong maka akan dihapus.
private void btnBroadcast_Click(object
sender, System.EventArgs e)
{
if
(txtBroadcast.Text != "")
{
UpdateStatus("Broadcasting: " + txtBroadcast.Text);
Broadcast("BROAD|"
+ txtBroadcast.Text);
txtBroadcast.Text = string.Empty;
}
}
No comments:
Post a Comment
silahkan membaca dan berkomentar