public void ServerStop() { if (listener != null) { listener.Stop(); //listener가 멈추면 } try { listeningThread.Abort(); UDP_UninitializeCall(); } catch { } try { MSGText msg = new MSGText(string.Format("<{0}> : {1}", "서버", "서버를 종료합니다.")); Send(msg, null); foreach (TcpClient client in clientList) { client.Close(); //soketArray안에 있는 모든 소켓을 루프시키며 닫는다. } } catch { } clientList.Clear(); listener = null; AddLog("Server Stop"); }
public void ProcessMessage(Packet packet, TcpClient sender) { MSGText msg = (MSGText)packet; Send(msg, sender); AddLog(msg.message); }
private void SendMessage() { //we need to send message out string user = ""; if (string.IsNullOrEmpty(MultiPlayerManager.Instance().lastSender)) //server will broadcast the message to everyone { user = MultiPlayerManager.IsServer() ? string.Join("", MultiPlayerManager.OnlineTrains.Players.Keys.Select((string k) => $"{k}\r")) + "0END" : "0Server\r0END"; } string msg = messageText.ToString(); int index = msg.IndexOf(':'); if (index > 0) { msg = messageText.ToString(index + 1, messageText.Length - index - 1); IEnumerable <string> onlinePlayers = messageLabel.Text.Substring(0, index) .Split(',') .Select((string n) => n.Trim()) .Where((string nt) => MultiPlayerManager.OnlineTrains.Players.ContainsKey(nt)) .Select((string nt) => $"{nt}\r"); string newUser = string.Join("", onlinePlayers); if (newUser.Length > 0) { user = newUser; } user += "0END"; } string msgText = new MSGText(MultiPlayerManager.GetUserName(), user, msg).ToString(); try { MultiPlayerManager.Notify(msgText); } #pragma warning disable CA1031 // Do not catch general exception types catch #pragma warning restore CA1031 // Do not catch general exception types { } finally { Visible = false; messageText.Clear(); game.Window.TextInput -= Window_TextInput; keyboardInput.ResumeFromOverlayInput(); } }
private void txtMessage_KeyPress(object sender, KeyPressEventArgs e) { this.Invoke(new MethodInvoker(delegate() { if (e.KeyChar == Convert.ToChar(Keys.Enter)) // Enter키 { if (btnConnect.Text == "Log-Out") // 접속 상태 { if (txtMessage.Text.Trim() != string.Empty) // 빈 값인지 확인 { string text = string.Format("<{0}> : {1}", txtID.Text, txtMessage.Text); MSGText msg = new MSGText(text); Send(msg); AddLog(text); txtMessage.Clear(); txtMessage.Focus(); e.Handled = true; } } } })); }
private void FormClient_FormClosed(object sender, FormClosedEventArgs e) { this.Invoke(new MethodInvoker(delegate() { if (btnConnect.Text == "Log-In") //Text에 Login이 뜨면 { return; } else { MSGText msg = new MSGText(string.Format("<{0}>님께서 접속 해제하셨습니다.", txtID.Text)); Packet.SendPacket(stream, msg); Disconnect(); } })); if (bIsCallActive) { UDP_UninitializeCall(); UDP_DropCall(); } Application.Exit(); }
private void btnConnect_Click(object sender, EventArgs e) { this.Invoke(new MethodInvoker(delegate() { if (btnConnect.Text == "Log-In") { // pre-condition if (txtServerIP.Text == string.Empty || txtID.Text == string.Empty) { MessageBox.Show("IP와 ID 모두 입력해주세요!"); return; } Connect(); } else { MSGText msg = new MSGText(string.Format("<{0}>님께서 접속 해제하셨습니다.", txtID.Text)); Packet.SendPacket(stream, msg); Disconnect(); UDP_UninitializeCall(); } })); }
public void Connect() { this.Invoke(new MethodInvoker(delegate() { try { client = new TcpClient(); // 소켓 생성 client.Connect(txtServerIP.Text, SERVER_PORT); // 송수신 스트림을 가져온다. stream = client.GetStream(); } catch { MessageBox.Show("해당 서버가 열려있지 않습니다!"); return; } Thread thd_Receive = new Thread(new ThreadStart(Receive)); thd_Receive.Start(); MSGText msg = new MSGText(string.Format("<{0}>님께서 접속하셨습니다.", txtID.Text)); Packet.SendPacket(stream, msg); btnConnect.Text = "Log-Out"; txtMessage.Focus(); })); }
public void AppendMessage(Keys[] newKeys, Keys[] oldKeys) { #if false foreach (var k in keys) { if (k == Keys.Enter) { this.Visible = false; UserInput.ComposingMessage = false; } if (k == Keys.Back) { if (Message.Text.Length <= 1) { Message.Text = ""; } else { Message.Text = Message.Text.Remove(Message.Text.Length - 1); } } else if (k == Keys.OemComma) { Message.Text += ","; } else if (k == Keys.OemPeriod) { Message.Text += "."; } else if (k == Keys.OemMinus) { Message.Text += "-"; } else if (k == Keys.OemQuestion) { Message.Text += "?"; } else if (k == Keys.OemQuotes) { Message.Text += "\""; } else if (k == Keys.OemSemicolon) { Message.Text += ";"; } else if (k == Keys.OemPlus) { Message.Text += "+"; } else { char c = (char)k; if (char.IsLetterOrDigit(c)) { Message.Text += char.ToLower(c); } if (c == ' ' || char.IsPunctuation(c)) { Message.Text += c; } } } #endif EnterReceived = false; string input = Convert(newKeys); foreach (char x in input) { //process backspace if (x == '\b') { if (Message.Text.Length >= 1) { Message.Text = Message.Text.Remove(Message.Text.Length - 1, 1); } } else { Message.Text += x; } } //we need to send message out if (EnterReceived == true) { string user = ""; if (MPManager.Instance().lastSender == "") //server will broadcast the message to everyone { user = MPManager.IsServer() ? string.Join("", MPManager.OnlineTrains.Players.Keys.Select((string k) => $"{k}\r")) + "0END" : "0Server\r0END"; } int index = Message.Text.IndexOf(':'); string msg = Message.Text; if (index > 0) { msg = Message.Text.Remove(0, index + 1); var onlinePlayers = Message.Text.Substring(0, index) .Split(',') .Select((string n) => n.Trim()) .Where((string nt) => MPManager.OnlineTrains.Players.ContainsKey(nt)) .Select((string nt) => $"{nt}\r"); string newUser = string.Join("", onlinePlayers); if (newUser != "") { user = newUser; } user += "0END"; } string msgText = new MSGText(MPManager.GetUserName(), user, msg).ToString(); try { MPManager.Notify(msgText); } catch { } finally { Visible = false; UserInput.ComposingMessage = false; Message.Text = ""; } } }
public void ProcessMessage(Packet packet) { MSGText msg = (MSGText)packet; AddLog(msg.message); }