Advertisement
user366312

ChatClientForm.cs

Apr 19th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.92 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.ServiceModel;
  9. using System.ServiceModel.Channels;
  10.  
  11. namespace ChatClient
  12. {
  13.     // IChatService = our hosted interface
  14.     public partial class ChatClientForm : Form
  15.     {
  16.         private ChatService _chatServer;
  17.  
  18.         // IChatChannel = channel for chat service
  19.         private IChatChannel channel;
  20.  
  21.         // IChatChannel = channel for chat service
  22.         private DuplexChannelFactory<IChatChannel> factory;
  23.  
  24.         public ChatClientForm()
  25.         {
  26.             InitializeComponent();
  27.  
  28.             _chatServer = new ChatService();
  29.  
  30.             this.AcceptButton = btnLogin;
  31.         }
  32.  
  33.         private void btnLogin_Click(object sender, EventArgs e)
  34.         {
  35.             if (!string.IsNullOrEmpty(txtUserName.Text.Trim()))
  36.             {
  37.                 try
  38.                 {
  39.                     _chatServer.NewJoin += ChatClient_NewJoin;
  40.                     _chatServer.MessageSent += ChatClient_MessageSent;
  41.                     _chatServer.RemoveUser += ChatClient_RemoveUser;
  42.  
  43.                     channel = null;
  44.                    
  45.                     _chatServer.UserName = txtUserName.Text.Trim();
  46.  
  47.                     InstanceContext context = new InstanceContext(new ChatService());
  48.                    
  49.                     // IChatChannel = channel for chat service
  50.                     factory = new DuplexChannelFactory<IChatChannel>(context, "ChatEndPoint");
  51.                     channel = factory.CreateChannel();
  52.  
  53.                     // IOnlineStatus = defines the properties and events
  54.                     //                 used by network-enabled objects to indicate
  55.                     //                 network availability.
  56.                     IOnlineStatus status = channel.GetProperty<IOnlineStatus>();
  57.                     status.Offline += new EventHandler(Offline);
  58.                     status.Online += new EventHandler(Online);                    
  59.                     channel.Open();
  60.                     channel.Join(_chatServer.UserName);
  61.                     grpMessageWindow.Enabled = true;
  62.                     grpUserList.Enabled = true;                    
  63.                     grpUserCredentials.Enabled = false;                    
  64.                     this.AcceptButton = btnSend;
  65.                     rtbMessages.AppendText("*****************************WEL-COME to Chat Application*****************************\r\n");
  66.                     txtSendMessage.Select();
  67.                     txtSendMessage.Focus();
  68.                 }
  69.                 catch (Exception ex)
  70.                 {
  71.                     MessageBox.Show(ex.ToString());
  72.                 }
  73.             }
  74.         }
  75.  
  76.         void ChatClient_RemoveUser(string name)
  77.         {
  78.             try
  79.             {
  80.                 rtbMessages.AppendText("\r\n");
  81.                 rtbMessages.AppendText(name + " left at " + DateTime.Now.ToString());
  82.                 lstUsers.Items.Remove(name);
  83.             }
  84.             catch (Exception ex)
  85.             {
  86.                 System.Diagnostics.Trace.WriteLine(ex.ToString());
  87.             }
  88.         }
  89.  
  90.         void ChatClient_MessageSent(string name, string message)
  91.         {
  92.             if (!lstUsers.Items.Contains(name))
  93.             {
  94.                 lstUsers.Items.Add(name);
  95.             }
  96.             rtbMessages.AppendText("\r\n");
  97.             rtbMessages.AppendText(name + " says: " + message);
  98.         }
  99.  
  100.         void ChatClient_NewJoin(string name)
  101.         {
  102.             rtbMessages.AppendText("\r\n");
  103.             rtbMessages.AppendText(name + " joined at: [" + DateTime.Now.ToString() + "]");            
  104.             lstUsers.Items.Add(name);      
  105.         }
  106.  
  107.         void Online(object sender, EventArgs e)
  108.         {
  109.             rtbMessages.AppendText("\r\nOnline: " + _chatServer.UserName);
  110.         }
  111.  
  112.         void Offline(object sender, EventArgs e)
  113.         {
  114.             rtbMessages.AppendText("\r\nOffline: " + _chatServer.UserName);
  115.         }
  116.  
  117.         private void btnSend_Click(object sender, EventArgs e)
  118.         {
  119.             channel.SendMessage(_chatServer.UserName, txtSendMessage.Text.Trim());
  120.  
  121.             txtSendMessage.Clear();
  122.             txtSendMessage.Select();
  123.             txtSendMessage.Focus();
  124.         }
  125.  
  126.         private void ChatClient_FormClosing(object sender, FormClosingEventArgs e)
  127.         {
  128.             try
  129.             {
  130.                 if (channel != null)
  131.                 {
  132.                     channel.Leave(_chatServer.UserName);
  133.                     channel.Close();
  134.                 }
  135.                 if (factory != null)
  136.                 {
  137.                     factory.Close();
  138.                 }
  139.             }
  140.             catch (Exception ex)
  141.             {
  142.                 MessageBox.Show(ex.ToString());
  143.             }
  144.         }
  145.     }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement