Remotе.kResponse OnMasterEvent(Remotе.kAction k_Action)
 {
     Remotе.kResponse k_Response = new Remotе.kResponse();
     if (mb_WaitButton)
     {
         k_Response.s_Result =
             "Sorry! Slave is currently busy.\r\nTry again later";
         return(k_Response);
     }
     textBoxMessage.Text = string.Format("Message from [{0}]:\r\n{1}\r\n(Click Button \"Send\" to answer)", k_Action.s_Computer, k_Action.s_Command);
     mi_EraseTextTimer.Stop();
     mb_WaitButton = true;
     while (mb_WaitButton)
     {
         Thread.Sleep(200);
     }
     ;
     k_Response.s_Result = textBoxResponce.Text;
     return(k_Response);
 }
        private void btnSend_Click(object sender, EventArgs e)
        {
            Remotе.kAction k_Action = new Remotе.kAction();
            k_Action.s_Command  = textBoxMessage.Text;
            k_Action.s_Computer = Environment.MachineName;
            this.Cursor         = Cursors.WaitCursor;
            string s_URL = string.Format("tcp://{0}:{1}/TestService", textBoxComputer.Text, textBoxPort.Text);

            try
            {
                mi_Transfer = (Remotе.cTransfer)Activator.GetObject(typeof(Remotе.cTransfer), s_URL);
                Remotе.kResponse k_Response = mi_Transfer.CallSlave(k_Action);
                textBoxAnswer.Text = "Answer from Slave:\r\n" + k_Response.s_Result;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(this, "Error sending message to Slave:\n" +
                                Ex.Message, "Master Error");
            }

            this.Cursor = Cursors.Arrow;
            mi_EraseTextTimer.Start();
        }