コード例 #1
0
        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");
        }
コード例 #2
0
        public void ProcessMessage(Packet packet, TcpClient sender)
        {
            MSGText msg = (MSGText)packet;

            Send(msg, sender);
            AddLog(msg.message);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
 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;
                 }
             }
         }
     }));
 }
コード例 #5
0
        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();
        }
コード例 #6
0
        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();
                }
            }));
        }
コード例 #7
0
        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();
            }));
        }
コード例 #8
0
        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 = "";
                }
            }
        }
コード例 #9
0
        public void ProcessMessage(Packet packet)
        {
            MSGText msg = (MSGText)packet;

            AddLog(msg.message);
        }