public void Connect(string username, string password) { if (_TcpClient.Connected == false) { _TcpClient.Connect(HOST, PORT); Prompt prompt = new Prompt(); prompt.status = Status.Connected; this.ShowPrompt(prompt); } if (_ServerStream == null) { _ServerStream = _TcpClient.GetStream(); } UserAccount usr = new UserAccount(); usr.username = string.IsNullOrEmpty(username) ? "Guest" : username; usr.email = "*****@*****.**"; string jstr = JS.Serialize<UserAccount>(usr); this.SendRaw(jstr); Thread task = new Thread(() => { _ServerStream = _TcpClient.GetStream(); try { byte[] bytes = new byte[BUFFER_SIZE]; int bytesRead = _ServerStream.Read(bytes, 0, bytes.Length); UserAccount user = JS.Deserialize<UserAccount>(bytes, bytesRead); if (this.IsLoggedIn(user)) { this._User = user; Prompt prompt = new Prompt(); prompt.status = Status.LoggedIn; this.ShowPrompt(prompt); startChatListen(); } } catch(Exception ex) { Prompt prompt = new Prompt(); prompt.status = (int)Status.LoggingError; prompt.description = ex.Message; this.ShowPrompt(prompt); } }); _Threads.Add(task.GetHashCode(), task); task.Start(); }
public void ShowPrompt(Prompt prompt) { string msg = prompt.description; switch (prompt.status) { case ClientService.Status.Connected: msg = "Холбогдлоо."; break; case ClientService.Status.LoggedIn: msg = "Нэвтэрч орлоо."; break; case ClientService.Status.LoggedOut: msg = "Нэвтэрч гарлаа."; break; case ClientService.Status.LoggingError: msg = "Нэвтрэх үед алдаа гарлаа!"; break; case ClientService.Status.CannotPass: msg = "Илгээхэд асуудал гарлаа!"; break; case ClientService.Status.CannotSend: msg = "Илгээж чадсангүй!"; break; case ClientService.Status.CannotReceived: msg = "Хүлээн авч чадсангүй!"; break; case ClientService.Status.Disconnected: msg = "Холболт салсан!"; break; default: return; } txtConversation.Text = txtConversation.Text + Environment.NewLine + " >> " + msg; }
private Thread startChatListen() { Thread task = new Thread(() => { while (true) { if (!_TcpClient.Connected) { Prompt prompt = new Prompt(); prompt.status = (int)Status.Disconnected; this.ShowPrompt(prompt); break; } _ServerStream = _TcpClient.GetStream(); try { byte[] bytes = new byte[BUFFER_SIZE]; int bytesRead = _ServerStream.Read(bytes, 0, bytes.Length); Message message = JS.Deserialize<Message>(bytes, bytesRead); this.ShowMessage(message); } catch { Prompt prompt = new Prompt(); prompt.status = (int)Status.CannotReceived; this.ShowPrompt(prompt); break; } Thread.Sleep(500); } }); _Threads.Add(task.GetHashCode(), task); task.Start(); return task; }
/*----*/ public void ShowPrompt(Prompt prompt) { try { if (_Control is Control) { ((Control)_Control).Invoke((ThreadStart)( () => { _Control.ShowPrompt(prompt); })); } } catch { } }
public void SendRaw(string jstr) { if (_ServerStream != null && _TcpClient.Connected) { byte[] outBytes = Encoding.UTF8.GetBytes(jstr); _ServerStream.Write(outBytes, 0, outBytes.Length); _ServerStream.Flush(); } else { Prompt prompt = new Prompt(); prompt.status = Status.CannotPass; this.ShowPrompt(prompt); } }
public void SendMessage(string msg, string to = null) { if (_ServerStream != null && _TcpClient.Connected && this.IsLoggedIn()) { Message message = new Message(); message.from = this._User.username; message.to = to; message.data = msg; string jstr = JS.Serialize<Message>(message); byte[] outBytes = Encoding.UTF8.GetBytes(jstr); _ServerStream.Write(outBytes, 0, outBytes.Length); _ServerStream.Flush(); } else { Prompt prompt = new Prompt(); prompt.status = Status.CannotSend; this.ShowPrompt(prompt); } }