示例#1
0
        void AsyncSendText(string ip, int port, string text)//асинхронная посылка текста
        {
            Thread t = new Thread(() =>
            {//потоковая процедура
                try
                {
                    TcpClient tcpClient      = new TcpClient(ip, port);
                    NetStreamReaderWriter ns = new NetStreamReaderWriter(tcpClient.GetStream());
                    ns.WriteLine(text);
                    //тут надо что-то сделать чтобы не закрыть соединение, пока клиент не примет сообщение
                    //пока что костыль
                    if (ns.ReadCmd().cmd != "!ok")
                    {
                        throw new Exception("В ответ получен не !ok");
                    }
                    Thread.Sleep(10000);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.AutoFlush = true;
                    System.Diagnostics.Debug.WriteLine("Dispatcher. AsyncSendText. " + ex.Message);
                }
            });

            t.Start();
        }
        /// <summary>
        /// Метод вызывается перед началом(инициацией) любого взаимодействия с другой стороной. Если канал занят, то ожидание. Если сбой, то возвращает false.
        /// </summary>
        /// <returns>false если не удалось начать транзакцию(если другая сторона в этот момент тоже пытается занять канал, либо не отвечает)</returns>
        public bool Begin()
        {
            string ans = "";

            mutex.WaitOne();
            netStream.WriteLine("!beginlockrequest");
            try
            {
                ans = netStream.ReadLine();
            }
            catch (Exception ex)
            {
                mutex.ReleaseMutex();
                return(false);
            }

            if (ans != "!lockaccepted")
            {
                return(false);
            }
            return(true);
        }
示例#3
0
 void SendText(string ip, int port, string text)//синхронная посылка команды(в том же потоке)
 {
     try
     {
         TcpClient             tcpClient = new TcpClient(ip, port);
         NetStreamReaderWriter ns        = new NetStreamReaderWriter(tcpClient.GetStream());
         ns.WriteLine(text);
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.AutoFlush = true;
         System.Diagnostics.Debug.WriteLine("Dispatcher. AsyncSendText. " + ex.Message);
     }
 }