Translate

Monday, August 8, 2016

broadcast




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