public ClientForm(Client client) { // // Required for Windows Form Designer support // InitializeComponent(); this.client = client; client.MessageReceived += new MessageReceivedEventHandler(client_MessageReceived); client.PrivateMessageReceived += new PrivateMessageReceivedEventHandler(client_PrivateMessageReceived); this.Text = client.Name; this.client.ServerChanged += new EventHandler(client_ServerChanged); updateEnabled(); }
public void ExitClient(Client client) { if (client==null) throw new ArgumentNullException("client"); lock (this) { if (client.Server == null) throw new InvalidOperationException("client has not entered a server"); client.Server = null; clients.Remove(client); Console.WriteLine("client left: {0}", client.Name); } }
public void EnterClient(Client client) { if (client==null) throw new ArgumentNullException("client"); lock (this) { if (client.Server != null) throw new InvalidOperationException("client has already entered a server"); string name = client.Name; foreach (Client c in clients) if (c.Name == name) throw new InvalidOperationException("client with that name has already entered"); clients.Add(client); client.Server = this; Console.WriteLine("client entered: {0}", name); } }
public void PostMessage(Client sender, string text) { if (sender==null) throw new ArgumentNullException("sender"); if (text==null) throw new ArgumentNullException("text"); lock (this) { Console.WriteLine("message posted by {0}: {1}", sender.Name, text); foreach (Client c in clients) { ClientReceiveMessageSender crms = new ClientReceiveMessageSender(false, c, sender, text); Thread t = new Thread(new ThreadStart(crms.Run)); t.Start(); } } }
public ClientReceiveMessageSender(bool privateMessage, Client c, Client sender, string text) { this.privateMessage = privateMessage; this.c = c; this.sender = sender; this.text = text; }
public void PostPrivateMessage(Client sender, string receiver, string text) { if (sender==null) throw new ArgumentNullException("sender"); if (receiver==null) throw new ArgumentNullException("receiver"); if (text==null) throw new ArgumentNullException("text"); lock (this) { Console.WriteLine("private message for {0} posted by {1}: {2}", receiver, sender.Name, text); foreach (Client c in clients) if (c.Name == receiver) { ClientReceiveMessageSender crms = new ClientReceiveMessageSender(true, c, sender, text); Thread t = new Thread(new ThreadStart(crms.Run)); t.Start(); } } }
public void Notify(Client clientCreated) { ClientCreatedEventHandler cc = this.ClientCreated; if (cc!=null) cc(clientCreated); }
public void ReceivePrivateMessage(Client sender, string text) { if (sender==null) throw new ArgumentNullException("sender"); if (text==null) throw new ArgumentNullException("text"); PrivateMessageReceivedEventHandler textReceived = this.PrivateMessageReceived; if (textReceived!=null) textReceived(this, sender, text); }
static void Main(string[] args) { IDictionary props = new Hashtable(); props["port"] = 0; BinaryClientFormatterSinkProvider clientFormatterProvider = new BinaryClientFormatterSinkProvider(); BinaryServerFormatterSinkProvider serverFormatterProvider = new BinaryServerFormatterSinkProvider(); serverFormatterProvider.TypeFilterLevel = TypeFilterLevel.Full; TcpChannel chan = new TcpChannel(props, clientFormatterProvider, serverFormatterProvider); ChannelServices.RegisterChannel(chan,false); string clientName = args.Length>0 ? args[0] : ("client#" + new Random().Next().ToString()); Client client = new Client(clientName); if (args.Length>2) { string uri = args[2]; ClientCreationNotifier notifier = (ClientCreationNotifier)Activator.GetObject( typeof(ClientCreationNotifier), uri); try { //System.Diagnostics.Debugger.Break();//--- notifier.Notify(client); } catch (Exception e) { MessageBox.Show(e.ToString()); } } using (ClientForm clientForm = new ClientForm(client)) { if (args.Length>1) { int pos = int.Parse(args[1]); Rectangle screen = Screen.PrimaryScreen.WorkingArea; clientForm.Location = new Point( 8+screen.Left + screen.Width/2*(pos&1), 8+screen.Top + screen.Height/2*((pos&2)>>1)); //clientForm.Size = new Size(screen.Width/2-16, screen.Height/2-16); clientForm.StartPosition = FormStartPosition.Manual; } Application.Run(clientForm); } }
private void client_PrivateMessageReceived(Client c, Client sender, string text) { if (this.InvokeRequired) this.BeginInvoke(new PrivateMessageReceivedEventHandler(this.client_PrivateMessageReceived), new object[]{c, sender, text}); else display(sender.Name + ": " + text + "\r\n"); }