Example #1
0
        public void RequestTrade(Player playerA, ITradeable itemA, Player playerB, ITradeable itemB)
        {
            if (playerA == playerB)
            {
                return;
            }

            if (playerB == null)
            {
                Money money = itemA as Money;
                Field field = itemB as Field;
                if (money != null && field != null && money.GetAmount() >= field.Price)
                {
                    FinalizeTrade(playerA, itemA, playerB, itemB);
                }
                return;
            }

            TradeMessage tradeMessage = new TradeMessage(playerA, itemA, playerB, itemB);

            if (playerA != null)
            {
                playerA.Messages.Add(tradeMessage);
                playerB.Messages.Add(tradeMessage);
            }
        }
Example #2
0
        public async Task <IActionResult> OnPostAsync(int?id, string postMessage)
        {
            var trade = await DbContext.Trades.FindAsync(id);

            if (trade == null)
            {
                return(NotFound());
            }

            if (!string.IsNullOrEmpty(postMessage))
            {
                var userContext = CoreService.GetUserContext();
                var tm          = new TradeMessage
                {
                    Message     = postMessage,
                    TradeId     = trade.Id,
                    VetMemberId = userContext.CurrentUser.Id
                };

                DbContext.TradeMessages.Add(tm);
                DbContext.SaveChanges();


                await SendMessages(trade, userContext.CurrentUser, postMessage);


                PostMessage = null;
            }
            return(await OnGetAsync(id));
        }
Example #3
0
        public async Task <IActionResult> OnPostAsync(int?id, string postMessage)
        {
            var trade = await DbContext.Trades
                        .Include(c => c.VetMember)
                        .FirstOrDefaultAsync(c => c.Id == id);

            if (trade == null)
            {
                return(NotFound());
            }

            if (!string.IsNullOrEmpty(postMessage))
            {
                var userContext = CoreService.GetUserContext();
                var tm          = new TradeMessage
                {
                    Message     = postMessage,
                    TradeId     = trade.Id,
                    VetMemberId = userContext.CurrentUser.Id
                };

                DbContext.TradeMessages.Add(tm);
                DbContext.SaveChanges();


                await SendMessages(trade, userContext.CurrentUser, postMessage);


                PostMessage = null;
            }
            return(RedirectToPage("./Details", new { id = id }));
        }
Example #4
0
        public void CreateFromString_()
        {
            var rawMessageString = TestSocketMessages.TradeMessage;
            var tradesMessage    = TradeMessage.CreateFromString(rawMessageString);

            Assert.NotNull(tradesMessage);
            Assert.Equal(0, tradesMessage.ChannelId);
            Assert.Equal(2, tradesMessage.Trades.Length);
        }
 private void HandleTradeMessage(TradeMessage message)
 {
     if (message.Trade.BuyOrSell == "Buy")
     {
         Buy(message.Trade);
     }
     if (message.Trade.BuyOrSell == "Sell")
     {
         Sell(message.Trade);
     }
 }
        internal BitMexTrade(int instrumentId, TradeMessage message)
        {
            InstrumentId = instrumentId;

            Timestamp       = message.Timestamp.ToClientValue() ?? default;
            Side            = message.Side.ToClientValue();
            Price           = message.Price;
            Size            = message.Size;
            TickDirection   = message.TickDirection.ToClientValue();
            TradeMatchId    = Guid.TryParse(message.TradeMatchId, out var id) ? id : default;
            GrossValue      = message.GrossValue;
            HomeNotional    = message.HomeNotional;
            ForeignNotional = message.ForeignNotional;
        }
Example #7
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="message">Original message. <see cref="TradeMessage"/></param>
 public Trade(TradeMessage message, Symbol symbol)
 {
     TradeTraderId    = message.TradeTraderId;
     TradeTimeStamp   = DWConverter.FromLongDateTime(message.TradeTimestamp);
     Position         = message.Position;
     Price            = DWConverter.FromProtoDecimal(message.Price);
     Quantity         = DWConverter.FromProtoDecimal(message.Quantity);
     PaidPrice        = DWConverter.FromProtoDecimal(message.PaidPrice);
     LiquidationPrice = DWConverter.FromProtoDecimal(message.LiquidationPrice);
     ExitPrice        = DWConverter.FromProtoDecimal(message.ExitPrice);
     Leverage         = message.Leverage;
     ContractId       = message.ContractId;
     OldContractId    = message.OldContractId;
     OldClientId      = DWConverter.FromProtoUuid(message.OldClientId);
     IsIncrease       = message.IsIncrease;
     IsLiquidation    = message.IsLiquidation;
     Symbol           = symbol;
 }
        public void PostTrades([FromBody] string tradeStream)
        {
            var message = new TradeMessage(tradeStream);

            try
            {
                List <OMSTradeData> trades = JsonConvert.DeserializeObject <List <OMSTradeData> >(tradeStream);
                foreach (var trade in trades)
                {
                    var tradeResult = _endpointInstance.Publish(trade);
                }
            }
            catch
            {
                message.ValidityType = MessageValidityType.Failure;
            }

            var messageResult = _endpointInstance.Publish(message);
        }
        private void SellPosition(Trade trade)
        {
            //Search owned positions for a match with the trade's ticker
            var position     = _portfolioPositions.Find(p => p.Ticker == trade.Ticker);
            var securityType = position.GetSecurityType();
            var ticker       = trade.Ticker;
            var shares       = trade.Shares;

            if (shares == position.SharesOwned)
            {
                //User selling all shares, so find and remove the security from portfolio
                var securityToRemove = _portfolioSecurities.Find(s => s.Ticker == ticker);
                _portfolioSecurities.Remove(securityToRemove);

                //Find and remove all taxlots
                var originalTaxLots = new List <Taxlot>(_portfolioTaxlots);
                var taxlotsToRemove = originalTaxLots.Where(t => t.Ticker == ticker);
                foreach (var lot in taxlotsToRemove)
                {
                    _portfolioTaxlots.Remove(lot);
                }

                //Remove the position
                _portfolioPositions.Remove(position);
            }
            else if (shares > position.SharesOwned)
            {
                //User trying to sell too many shares
                var message = new TradeMessage()
                {
                    Shares = shares, Ticker = ticker, Message = "Order quantity exceeds shares owned!"
                };
                Messenger.Default.Send(message);
            }
            else
            {
                //User selling partial position
                position.SellShares(shares);
            }
        }
        private void HandleData(KrakenMessageEventArgs eventArgs, SubscriptionStatus subscription)
        {
            var dataType = subscription.Subscription.Name;

            if (dataType == SubscribeOptionNames.Ticker)
            {
                var tickerMessage = TickerMessage.CreateFromString(eventArgs.RawContent, subscription);
                TickerReceived.InvokeAll(this, new TickerEventArgs(subscription.ChannelId.Value, subscription.Pair, tickerMessage));
            }
            if (dataType == SubscribeOptionNames.OHLC)
            {
                var ohlcMessage = OhlcMessage.CreateFromString(eventArgs.RawContent);
                OhlcReceived.InvokeAll(this, new OhlcEventArgs(subscription.ChannelId.Value, subscription.Pair, ohlcMessage));
            }
            if (dataType == SubscribeOptionNames.Trade)
            {
                var tradeMessage = TradeMessage.CreateFromString(eventArgs.RawContent);
                TradeReceived.InvokeAll(this, new TradeEventArgs(subscription.ChannelId.Value, subscription.Pair, tradeMessage));
            }
            if (dataType == SubscribeOptionNames.Spread)
            {
                var spreadMessage = SpreadMessage.CreateFromString(eventArgs.RawContent);
                SpreadReceived.InvokeAll(this, new SpreadEventArgs(subscription.ChannelId.Value, subscription.Pair, spreadMessage));
            }
            if (dataType == SubscribeOptionNames.Book)
            {
                if (eventArgs.RawContent.Contains(@"""as"":") && eventArgs.RawContent.Contains(@"""bs"":"))
                {
                    var bookSnapshotMessage = BookSnapshotMessage.CreateFromString(eventArgs.RawContent);
                    BookSnapshotReceived.InvokeAll(this, new KrakenDataEventArgs <BookSnapshotMessage>(eventArgs.ChannelId.Value, subscription.Pair, bookSnapshotMessage));
                }
                if (eventArgs.RawContent.Contains(@"""a"":") || eventArgs.RawContent.Contains(@"""b"":"))
                {
                    var bookUpdateMessage = BookUpdateMessage.CreateFromString(eventArgs.RawContent);
                    BookUpdateReceived.InvokeAll(this, new KrakenDataEventArgs <BookUpdateMessage>(eventArgs.ChannelId.Value, subscription.Pair, bookUpdateMessage));
                }
            }
        }
Example #11
0
        public void MPSMessageHander(MPSMessage message)
        {
            // pre-checks
            // Push message to the queue
            // Optional ACK. This would mean local resilience would be required for processing queue.
            TradeMessageHeader header = message.Header as TradeMessageHeader;
            ITrade             trade  = message.Payload as ITrade;

            if (header == null)
            {
                logger.Error($"Failed to parse message with header key: {message.Header.MessageKey}");
                return;
            }

            if (trade == null)
            {
                logger.Error($"Failed to parse message with header key: {header.MessageKey} and sequence no: {header.SequenceNumber}");
                return;
            }

            TradeMessage tradeMessage = new TradeMessage()
            {
                Header = header, Trade = trade
            };

            try
            {
                AddMessage(tradeMessage);
            }
            catch (Exception ex)
            {
                logger.Warn(ex, $"Error while adding message with sequence number {tradeMessage.Header.SequenceNumber} to queue. Retrying ...");
                if (!RetryHandler(AddMessage, tradeMessage))
                {
                    logger.Error($"Retries failed for sequence number : {tradeMessage.Header.SequenceNumber}");
                }
            }
        }
Example #12
0
        public void AddMessage(string message, Trade trade, RuleAttribute attribute = null, RewardRule rule = null)
        {
            if (trade != null)
            {
                TradeMessage tradeMessage = new TradeMessage
                {
                    TradeId = trade.Id,
                    Message = message,
                };
                if (attribute != null)
                {
                    tradeMessage.RuleId   = attribute.Id;
                    tradeMessage.RuleName = attribute.Name;
                    tradeMessage.Type     = Resolve <IRuleModuleService>().GetRuleType(attribute.Id)?.FullName;
                }
                if (rule != null)
                {
                    tradeMessage.ConfigId = rule.Id;
                    tradeMessage.RuleName = rule.Base?.Name;
                }

                Resolve <ITradeMessageService>().Add(tradeMessage);
            }
        }
Example #13
0
 private void AddMessage(TradeMessage message)
 {
     queues[message.Trade.Type].Enqueue(message);
 }
Example #14
0
        public async Task TestMappedStateSizeLimit()
        {
            var stateSizeLimit = SmartContractConstants.StateSizeLimit;

            {
                var str      = Encoding.UTF8.GetString(new byte[stateSizeLimit]);
                var txResult = await TestBasicSecurityContractStub.TestMappedState.SendWithExceptionAsync(
                    new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        StringValue = str
                    }
                });

                txResult.TransactionResult.Error.ShouldContain($"exceeds limit of {stateSizeLimit}");

                await TestBasicSecurityContractStub.TestMappedState.SendAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        Int64Value = 1
                    }
                });

                var queryResult = await TestBasicSecurityContractStub.QueryMappedState.CallAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        Int64Value = 1
                    }
                });

                queryResult.Int64Value.ShouldBe(1);

                (await TestBasicSecurityContractStub.QueryMappedState.CallAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        Int64Value = 2
                    }
                })).ShouldBe(new ProtobufMessage());
            }

            {
                var str      = Encoding.UTF8.GetString(new byte[stateSizeLimit]);
                var txResult = await TestBasicSecurityContractStub.TestMapped1State.SendWithExceptionAsync(
                    new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        StringValue = str
                    }
                });

                txResult.TransactionResult.Error.ShouldContain($"exceeds limit of {stateSizeLimit}");

                var str1    = Encoding.UTF8.GetString(new byte[10]);
                var message = new ProtobufMessage
                {
                    BoolValue   = true,
                    Int64Value  = 1,
                    StringValue = str1
                };
                await TestBasicSecurityContractStub.TestMapped1State.SendAsync(new ProtobufInput
                {
                    ProtobufValue = message
                });

                var queryResult = await TestBasicSecurityContractStub.QueryMappedState1.CallAsync(new ProtobufInput
                {
                    ProtobufValue = message
                });

                queryResult.ShouldBe(message);

                (await TestBasicSecurityContractStub.QueryMappedState1.CallAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        BoolValue = true,
                        Int64Value = 2,
                        StringValue = str1
                    }
                })).ShouldBe(new ProtobufMessage());
            }

            {
                var str      = Encoding.UTF8.GetString(new byte[stateSizeLimit]);
                var txResult = await TestBasicSecurityContractStub.TestMapped2State.SendWithExceptionAsync(
                    new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        StringValue = str
                    }
                });

                await TestBasicSecurityContractStub.TestMapped2State.SendAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                    }
                });

                txResult.TransactionResult.Error.ShouldContain($"exceeds limit of {stateSizeLimit}");

                var str1    = Encoding.UTF8.GetString(new byte[10]);
                var message = new ProtobufMessage
                {
                    BoolValue   = true,
                    Int64Value  = 1,
                    StringValue = str1
                };

                await TestBasicSecurityContractStub.TestMapped2State.SendAsync(new ProtobufInput
                {
                    ProtobufValue = message
                });

                var queryResult = await TestBasicSecurityContractStub.QueryMappedState2.CallAsync(new ProtobufInput
                {
                    ProtobufValue = message
                });

                queryResult.ShouldBe(message);

                (await TestBasicSecurityContractStub.QueryMappedState2.CallAsync(new ProtobufInput
                {
                    ProtobufValue = new ProtobufMessage
                    {
                        BoolValue = true,
                        Int64Value = 2,
                        StringValue = str1
                    }
                })).ShouldBe(new ProtobufMessage());
            }

            {
                var str     = Encoding.UTF8.GetString(new byte[stateSizeLimit]);
                var message = new TradeMessage
                {
                    FromAmount = 1024
                };

                var txResult = await TestBasicSecurityContractStub.TestMapped3State.SendWithExceptionAsync(
                    new Complex3Input
                {
                    TradeDetails = new TradeMessage
                    {
                        FromAmount = 1,
                        Memo       = str
                    }
                });

                txResult.TransactionResult.Error.ShouldContain($"exceeds limit of {stateSizeLimit}");

                var str1 = Encoding.UTF8.GetString(new byte[10]);

                var complex3Input = new Complex3Input
                {
                    From         = str1,
                    To           = str1,
                    TradeDetails = message
                };
                await TestBasicSecurityContractStub.TestMapped3State.SendAsync(complex3Input);

                var queryResult = await TestBasicSecurityContractStub.QueryMappedState3.CallAsync(complex3Input);

                queryResult.FromAmount.ShouldBe(message.FromAmount);

                (await TestBasicSecurityContractStub.QueryMappedState3.CallAsync(new Complex3Input
                {
                    From = str1,
                    To = str1,
                    PairA = str1,
                    TradeDetails = message
                })).ShouldBe(new TradeMessage());
            }
        }
 public function process(TradeMessage msg)
 {
     //logic
 }
 public bool CommitMessage(TradeMessage message)
 {
     Messages.AddRange(message);
     SaveChanges();
     return(true);
 }
 public void ProcessMessage(TradeMessage message)
 {
     // Base processing
 }
Example #18
0
        private void HandleIncomingMessage(object sender, KrakenMessageEventArgs eventArgs)
        {
            logger.LogDebug("Handling incoming '{event}' message", eventArgs.Event);

            switch (eventArgs.Event)
            {
            case Heartbeat.EventName:
                var heartbeat = serializer.Deserialize <Heartbeat>(eventArgs.RawContent);
                logger.LogTrace("Heartbeat received: {heartbeat}", heartbeat);
                HeartbeatReceived.InvokeAll(this, heartbeat);
                break;

            case SystemStatus.EventName:
                var systemStatus = serializer.Deserialize <SystemStatus>(eventArgs.RawContent);
                logger.LogTrace("System status changed: {systemStatus}", systemStatus);
                SystemStatus = systemStatus;
                SystemStatusChanged.InvokeAll(this, systemStatus);
                break;

            case SubscriptionStatus.EventName:
                var subscriptionStatus = serializer.Deserialize <SubscriptionStatus>(eventArgs.RawContent);
                logger.LogTrace("Subscription status changed: {subscriptionStatus}", subscriptionStatus);

                SynchronizeSubscriptions(subscriptionStatus);
                SubscriptionStatusChanged.InvokeAll(this, subscriptionStatus);

                break;

            case "data":

                var subscription = Subscriptions.ContainsKey(eventArgs.ChannelId.Value) ? Subscriptions[eventArgs.ChannelId.Value] : null;
                if (subscription == null)
                {
                    logger.LogWarning("Didn't find a subscription for channelId {channelId}", eventArgs.ChannelId);
                    break;
                }

                var dataType = subscription.Subscription.Name;

                if (dataType == SubscribeOptionNames.Ticker)
                {
                    var tickerMessage = TickerMessage.CreateFromString(eventArgs.RawContent, subscription);
                    TickerReceived.InvokeAll(this, new TickerEventArgs(subscription.ChannelId.Value, subscription.Pair, tickerMessage));
                }
                if (dataType == SubscribeOptionNames.OHLC)
                {
                    var ohlcMessage = OhlcMessage.CreateFromString(eventArgs.RawContent);
                    OhlcReceived.InvokeAll(this, new OhlcEventArgs(subscription.ChannelId.Value, subscription.Pair, ohlcMessage));
                }
                if (dataType == SubscribeOptionNames.Trade)
                {
                    var tradeMessage = TradeMessage.CreateFromString(eventArgs.RawContent);
                    TradeReceived.InvokeAll(this, new TradeEventArgs(subscription.ChannelId.Value, subscription.Pair, tradeMessage));
                }
                if (dataType == SubscribeOptionNames.Spread)
                {
                    var spreadMessage = SpreadMessage.CreateFromString(eventArgs.RawContent);
                    SpreadReceived.InvokeAll(this, new SpreadEventArgs(subscription.ChannelId.Value, subscription.Pair, spreadMessage));
                }
                if (dataType == SubscribeOptionNames.Book)
                {
                    if (eventArgs.RawContent.Contains(@"""as"":") && eventArgs.RawContent.Contains(@"""bs"":"))
                    {
                        var bookSnapshotMessage = BookSnapshotMessage.CreateFromString(eventArgs.RawContent);
                        BookSnapshotReceived.InvokeAll(this, new KrakenDataEventArgs <BookSnapshotMessage>(eventArgs.ChannelId.Value, subscription.Pair, bookSnapshotMessage));
                    }
                    if (eventArgs.RawContent.Contains(@"""a"":") || eventArgs.RawContent.Contains(@"""b"":"))
                    {
                        var bookUpdateMessage = BookUpdateMessage.CreateFromString(eventArgs.RawContent);
                        BookUpdateReceived.InvokeAll(this, new KrakenDataEventArgs <BookUpdateMessage>(eventArgs.ChannelId.Value, subscription.Pair, bookUpdateMessage));
                    }
                }

                break;

            default:
                logger.LogWarning("Could not handle incoming message: {message}", eventArgs.RawContent);
                break;
            }
        }
Example #19
0
        public void WebSocketMessageHandler(MessageArgs e)
        {
            //cout(e.Text);
            string text = e.Text.Replace("\u0000", string.Empty);

            if (text.StartsWith("["))
            {
                JArray array  = JArray.Parse(text);
                int    chanId = array[0].Value <int>();

                // Check the ChannelId of the message
                if (m_tickerChannelIds.ContainsKey(chanId))     // is this channel id in our TICKER list?
                {
                    string symbol = m_tickerChannelIds[chanId];
                    JArray ja     = array[1] as JArray;
                    if (ja == null)
                    {
                        string msgtype = array[1].Value <string>();
                        if (msgtype == "hb")
                        {
                            //dout("BITFINEX:HEARTBEAT");
                        }
                        else
                        {
                            ErrorMessage("Bitfinex::WebSocketMessageHandler=> Unknown ticker message type: {0}", msgtype);
                        }
                        return;
                    }
                    var tim = new TickerMessage(ja);
                    // TODO: Fire event with this ticker update
                    cout("BITFINEX Ticker: {0} {1}", symbol, tim.ToString());
                    return;
                }
                else if (m_tradeChannelIds.ContainsKey(chanId)) // is this channel id in our TRADE list?
                {
                    string symbol = m_tradeChannelIds[chanId];
                    JArray ja     = array[1] as JArray;
                    if (ja == null)
                    {
                        string msgtype = array[1].Value <string>();
                        if (msgtype == "hb")
                        {
                            //dout("BITFINEX:HEARTBEAT");
                        }
                        else if (msgtype == "te")
                        {
                            ja = array[2] as JArray;
                            var trm = new TradeMessage(ja);
                            // TODO: Fire event with this trade execution
                            cout("BITFINEX Trade Execution: {0} {1}", symbol, trm.ToString());
                        }
                        else if (msgtype == "tu")
                        {
                            ja = array[2] as JArray;
                            var trm = new TradeMessage(ja);
                            // TODO: Fire event with this trade execution update
                            cout("BITFINEX Trade Execution Update: {0} {1}", symbol, trm.ToString());
                        }
                        else
                        {
                            ErrorMessage("Bitfinex::WebSocketMessageHandler=> Unknown trade message type: {0}", msgtype);
                        }
                        return;
                    }
                    foreach (JArray t in ja)
                    {
                        var trm = new TradeMessage(t);
                        // TODO: Fire event with this trade update
                        cout("BITFINEX Trade: {0} {1}", symbol, trm.ToString());
                    }
                    return;
                }

                if (array[1] is JArray)
                {
                    JArray book = array[1].Value <JArray>();
                    if (book[0] is JArray)
                    {
                        //m_orderBook.Clear();
                        for (int i = 0; i < book.Count; ++i)
                        {
                            var   bookEntry     = book[i].Value <JArray>();
                            float price         = bookEntry[0].Value <float>();
                            int   ordersAtLevel = bookEntry[1].Value <int>();
                            float amount        = bookEntry[2].Value <float>();
                            //cout("{0} {1} {2}", price, ordersAtLevel, amount);
                            if (ordersAtLevel == 0)
                            {
                                m_orderBook.UpdateBid(price.ToString(), 0);
                                m_orderBook.UpdateAsk(price.ToString(), 0);
                            }
                            else
                            {
                                if (amount >= 0)     // bid
                                {
                                    m_orderBook.UpdateBid(price.ToString(), amount.ToString());
                                }
                                if (amount <= 0)    // ask
                                {
                                    m_orderBook.UpdateAsk(price.ToString(), (-amount).ToString());
                                }
                            }
                        }
                        FireOrderBookUpdate();
                    }
                    else        // only contains a SINGLE book entry (a single list containing 3 values)
                    {
                        float price         = book[0].Value <float>();
                        int   ordersAtLevel = book[1].Value <int>();
                        float amount        = book[2].Value <float>();
                        //cout("{0} {1} {2}", price, ordersAtLevel, amount);
                        if (ordersAtLevel == 0)
                        {
                            m_orderBook.UpdateBid(price.ToString(), 0);
                            m_orderBook.UpdateAsk(price.ToString(), 0);
                        }
                        else
                        {
                            if (amount >= 0)     // bid
                            {
                                m_orderBook.UpdateBid(price.ToString(), amount.ToString());
                            }
                            if (amount <= 0)    // ask
                            {
                                m_orderBook.UpdateAsk(price.ToString(), (-amount).ToString());
                            }
                        }
                        FireOrderBookUpdate();
                    }
                }
                else
                {
                    if (array[1].Type == JTokenType.String && array[1].Value <string>() == "hb")
                    {
                        dout("{0} BITFINEX:HEARTBEAT", DateTime.Now.ToString("HH:mm:ss"));
                    }
                    else
                    {
                        ErrorMessage("BITFINEX: Unknown message: {0}", array[1]);
                    }
                }
            }
            else
            {
                JObject msg = JObject.Parse(text);
                if (msg["event"] != null)
                {
                    string msgType = msg["event"].Value <string>();
                    if (msgType == "info")
                    {
                        var version = msg["version"];
                        if (version != null)
                        {
                            int     iversion = version.Value <int>();
                            JObject platform = msg["platform"] as JObject;
                            int     status   = platform["status"].Value <int>();
                            dout("BITFINEX: info  version={0} status={1}", iversion, status);
                        }
                        var code = msg["code"];
                        if (code != null)
                        {
                            int    icode   = code.Value <int>();
                            string message = msg["msg"].Value <string>();
                            dout("BITFINEX: info  code={0} message:{1}", icode, message);
                        }
                    }
                    else if (msgType == "subscribed")
                    {
                        //dout("BITFINEX: subscribed");
                        string channel = msg["channel"].Value <string>();
                        int    chanId  = msg["chanId"].Value <int>();
                        string symbol  = msg["symbol"].Value <string>();
                        string pair    = msg["pair"].Value <string>();
                        if (channel == "ticker")
                        {
                            m_tickerChannelIds[chanId] = pair;
                        }
                        else if (channel == "trades")
                        {
                            m_tradeChannelIds[chanId] = pair;
                        }
                        else
                        {
                            ErrorMessage("Bitfinex::WebSocketMessageHandler=> Unknown channel in 'subscribed' message: {0}", channel);
                        }
                        dout("BITFINEX:subscribed  channel={0} chanId={1} symbol={2} pair={3}", channel, chanId, symbol, pair);
                    }
                }
                else
                {
                    ErrorMessage("Unknown message type: ", Str(msg));
                }
            }

            return;
        }
Example #20
0
 private void SetAlertMessage(TradeMessage message)
 {
     AlertBoxMessage = message.Message;
     AlertBoxVisible = true;
 }
Example #21
0
 /// <summary>
 /// Send a message to the hub
 /// </summary>
 /// <param name="message">message to send</param>
 public async Task SendAsync(TradeMessage message)
 {
     await SendAsyncObject("SendTradeMessage", message);
 }
Example #22
0
 /// <summary>
 /// Handle an inbound message from a hub
 /// </summary>
 /// <param name="method">event name</param>
 /// <param name="message">message content</param>
 private void HandleReceiveMessage(TradeMessage tradeMessage)
 {
     // raise an event to subscribers
     //MessageReceived?.Invoke(this, new MessageReceivedEventArgs(tradeMessage));
 }
Example #23
0
 /// <summary>
 /// Retries for configurable number of time. This should be part of common utility.
 /// </summary>
 /// <param name="retryTask">Method to invoke</param>
 /// <returns>True if invocation is success, else false is returned after maximum retries. </returns>
 private bool RetryHandler(Action <TradeMessage> retryTask, TradeMessage message)
 {
     return(true);
 }