public bool Send(byte[] data)
        {
            int length = data.Length;

            lock (_syncTcp)
            {
                if (ConnectionStatus == ConnectionStatusEnum.ConnectedInicialized || ConnectionStatus == ConnectionStatusEnum.ConnectedNotInicialized)
                {
                    try
                    {
                        _netStream.Write(data, 0, length);
                        return(true);
                    }
                    catch (IOException)                     //timeout
                    {
                        ConnectionStatus = ConnectionStatusEnum.Disconnected;
                        DisconnectedEvent.Set();
                        if (AutoReconnect)
                        {
                            Connect();
                        }
                    }
                }
            }
            return(false);
        }
예제 #2
0
파일: SellSide.cs 프로젝트: zeropool/Vigoth
 private void OnStateChange(Object sender, StateChangeEventArgs e)
 {
     Console.WriteLine("FIX session state: " + e.NewState.ToString());
     if (e.NewState == SessionState.DISCONNECTED)
     {
         DisconnectedEvent.Set();
     }
 }
        /// <summary>
        /// Odesla data a ihned ceka na odpoved.
        /// </summary>
        /// <param name="data">Data, ktera se odesilaji.</param>
        /// <param name="dataLength">Pocet bytu k odeslani.</param>
        /// <param name="answer">Odpoved</param>
        /// <param name="answerLength">Pocet bytu odpovedi.</param>
        /// <param name="log">Moznost definovat log</param>
        /// <returns>True, pokud odeasli a prijem probehlo.</returns>
        public bool SendReceive(byte[] data, int dataLength, ref byte[] answer, ref int answerLength, Func <byte[], int, bool> continueRead = null)
        {
            if (continueRead == null)
            {
                continueRead = (read, readLenght) =>
                {
                    return(false);
                };
            }

            lock (_syncTcp)
            {
                if (ConnectionStatus == ConnectionStatusEnum.ConnectedInicialized || ConnectionStatus == ConnectionStatusEnum.ConnectedNotInicialized)
                {
                    {
                        try
                        {
                            _netStream.Write(data, 0, dataLength);
                            answerLength = 0;
                            do
                            {
                                answerLength += _netStream.Read(answer, answerLength, answer.Length);
                            } while (continueRead(answer, answerLength));

                            return(true);
                        }
                        catch (IOException)                         //timeout
                        {
                            ConnectionStatus = ConnectionStatusEnum.Disconnected;
                            DisconnectedEvent.Set();
                            if (AutoReconnect)
                            {
                                Connect();
                            }
                        }
                    }
                }
            }
            return(false);
        }
 /// <summary>
 /// Precte data ze socketu a vraci je jako pole byte.
 /// </summary>
 /// <param name="data">Prectena data</param>
 /// <param name="length">Pocet byte, ktere byly vycteny.</param>
 /// <returns>True, pokud byla nejaka data vyctena.</returns>
 public bool Receive(ref byte[] data, ref int length)
 {
     lock (_syncTcp)
     {
         if (ConnectionStatus == ConnectionStatusEnum.ConnectedInicialized || ConnectionStatus == ConnectionStatusEnum.ConnectedNotInicialized)
         {
             try
             {
                 length = _netStream.Read(data, 0, data.Length);
                 return(true);
             }
             catch (IOException)                     //timeout
             {
                 ConnectionStatus = ConnectionStatusEnum.Disconnected;
                 DisconnectedEvent.Set();
                 if (AutoReconnect)
                 {
                     Connect();
                 }
             }
         }
     }
     return(false);
 }
예제 #5
0
 /// <summary>
 /// Callback for Disconnected event from HsClient
 /// Try to reconnect
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void HsClient_Disconnected(object sender, EventArgs e)
 {
     Console.WriteLine("HsClient_Disconnected: {0}", ((IScsServiceClient <IHSApplication>)sender).CommunicationState);
     // Try again
     DisconnectedEvent.Set();
 }