예제 #1
0
 // Use this for initialization
 void Start()
 {
     if (Pusher == null)
     {
         Pusher = this;
     }
     else
     {
         Destroy(this);
     }
     DontDestroyOnLoad(this);
     _class = new AndroidJavaClass("com.matbar.pusher.PusherManager");
     javaStart();
 }
예제 #2
0
        /// <inheritdoc />
        protected override bool OnSendInMessage(Message message)
        {
            switch (message.Type)
            {
            case MessageTypes.Reset:
            {
                _lastMyTradeId        = 0;
                _lastTimeBalanceCheck = null;

                if (_httpClient != null)
                {
                    try
                    {
                        _httpClient.Dispose();
                    }
                    catch (Exception ex)
                    {
                        SendOutError(ex);
                    }

                    _httpClient = null;
                }

                if (_pusherClient != null)
                {
                    try
                    {
                        UnsubscribePusherClient();
                        _pusherClient.Disconnect();
                    }
                    catch (Exception ex)
                    {
                        SendOutError(ex);
                    }

                    _pusherClient = null;
                }

                SendOutMessage(new ResetMessage());

                break;
            }

            case MessageTypes.Connect:
            {
                if (this.IsTransactional())
                {
                    if (!AuthV2 && ClientId.IsEmpty())
                    {
                        throw new InvalidOperationException(LocalizedStrings.Str3835);
                    }

                    if (Key.IsEmpty())
                    {
                        throw new InvalidOperationException(LocalizedStrings.Str3689);
                    }

                    if (Secret.IsEmpty())
                    {
                        throw new InvalidOperationException(LocalizedStrings.Str3690);
                    }
                }

#if !IGNORE_LICENSE
                var msg = "Crypto".ValidateLicense(component: GetType());
                if (!msg.IsEmpty())
                {
                    msg = nameof(BitStamp).ValidateLicense(component: GetType());

                    if (!msg.IsEmpty())
                    {
                        throw new InvalidOperationException(msg);
                    }
                }
#endif

                if (_httpClient != null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1619);
                }

                if (_pusherClient != null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1619);
                }

                _httpClient = new HttpClient(ClientId, Key, Secret, AuthV2)
                {
                    Parent = this
                };

                _pusherClient = new PusherClient {
                    Parent = this
                };
                SubscribePusherClient();
                _pusherClient.Connect();

                break;
            }

            case MessageTypes.Disconnect:
            {
                if (_httpClient == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1856);
                }

                if (_pusherClient == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1856);
                }

                _httpClient.Dispose();
                _httpClient = null;

                _pusherClient.Disconnect();

                break;
            }

            case MessageTypes.PortfolioLookup:
            {
                ProcessPortfolioLookup((PortfolioLookupMessage)message);
                break;
            }

            case MessageTypes.OrderStatus:
            {
                ProcessOrderStatus((OrderStatusMessage)message);
                break;
            }

            case MessageTypes.OrderRegister:
            {
                ProcessOrderRegister((OrderRegisterMessage)message);
                break;
            }

            case MessageTypes.OrderCancel:
            {
                ProcessOrderCancel((OrderCancelMessage)message);
                break;
            }

            case MessageTypes.OrderGroupCancel:
            {
                ProcessOrderGroupCancel((OrderGroupCancelMessage)message);
                break;
            }

            case MessageTypes.Time:
            {
                if (_orderInfo.Count > 0)
                {
                    ProcessOrderStatus(null);
                    ProcessPortfolioLookup(null);
                }

                if (BalanceCheckInterval > TimeSpan.Zero &&
                    (_lastTimeBalanceCheck == null || (CurrentTime - _lastTimeBalanceCheck) > BalanceCheckInterval))
                {
                    ProcessPortfolioLookup(null);
                }

                _pusherClient?.ProcessPing();

                //ProcessLevel1();
                break;
            }

            case MessageTypes.SecurityLookup:
            {
                ProcessSecurityLookup((SecurityLookupMessage)message);
                break;
            }

            case MessageTypes.MarketData:
            {
                ProcessMarketData((MarketDataMessage)message);
                break;
            }

            default:
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Send message.
        /// </summary>
        /// <param name="message">Message.</param>
        protected override void OnSendInMessage(Message message)
        {
            switch (message.Type)
            {
            case MessageTypes.Reset:
            {
                _lastMyTradeId     = 0;
                _hasActiveOrders   = false;
                _hasMyTrades       = false;
                _requestOrderFirst = false;
                _prevLevel1Time    = default(DateTimeOffset);

                if (_httpClient != null)
                {
                    try
                    {
                        _httpClient.Dispose();
                    }
                    catch (Exception ex)
                    {
                        SendOutError(ex);
                    }

                    _httpClient = null;
                }

                if (_pusherClient != null)
                {
                    try
                    {
                        DisposePusherClient();
                    }
                    catch (Exception ex)
                    {
                        SendOutError(ex);
                    }

                    _pusherClient = null;
                }

                SendOutMessage(new ResetMessage());

                break;
            }

            case MessageTypes.Connect:
            {
                if (_httpClient != null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1619);
                }

                if (_pusherClient != null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1619);
                }

                _httpClient = new HttpClient(ClientId, Key, Secret);

                _pusherClient = new PusherClient();

                _pusherClient.PusherConnected    += SessionOnPusherConnected;
                _pusherClient.PusherDisconnected += SessionOnPusherDisconnected;
                _pusherClient.PusherError        += SessionOnPusherError;
                _pusherClient.NewOrderBook       += SessionOnNewOrderBook;
                _pusherClient.NewTrade           += SessionOnNewTrade;

                _pusherClient.ConnectPusher();
                break;
            }

            case MessageTypes.Disconnect:
            {
                if (_httpClient == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1856);
                }

                if (_pusherClient == null)
                {
                    throw new InvalidOperationException(LocalizedStrings.Str1856);
                }

                DisposePusherClient();
                _pusherClient = null;

                _httpClient.Dispose();
                _httpClient = null;

                break;
            }

            case MessageTypes.PortfolioLookup:
            {
                ProcessPortfolioLookup((PortfolioLookupMessage)message);
                break;
            }

            case MessageTypes.OrderStatus:
            {
                _lastMyTradeId     = 0;
                _hasActiveOrders   = true;
                _hasMyTrades       = true;
                _requestOrderFirst = true;

                ProcessOrderStatus();
                break;
            }

            case MessageTypes.OrderRegister:
            {
                ProcessOrderRegister((OrderRegisterMessage)message);
                break;
            }

            case MessageTypes.OrderCancel:
            {
                ProcessOrderCancel((OrderCancelMessage)message);
                break;
            }

            case MessageTypes.Time:
            {
                if (_hasActiveOrders || _hasMyTrades)
                {
                    ProcessOrderStatus();
                    ProcessPortfolioLookup(null);
                }

                ProcessLevel1();
                break;
            }

            case MessageTypes.SecurityLookup:
            {
                ProcessSecurityLookup((SecurityLookupMessage)message);
                break;
            }

            case MessageTypes.MarketData:
            {
                ProcessMarketData((MarketDataMessage)message);
                break;
            }
            }
        }
 public CompleteChoreHandler(PusherClient pusher)
 {
     _pusher = pusher;
 }
 void HandleConnectionStateChanged(object sender, PusherClient.ConnectionState state)
 {
     Debug.Log ( "Pusher connection state changed to: " + state );
 }