/// <summary>
 /// Process real time data subscription
 /// </summary>
 public IBusMessageOutbound ProcessConnectionChange(IBusMessageInbound envelop, PinkoMsgClientConnect clientConnect)
 {
     using (CalculatingMutex.LockDisposible())
     {
         Trace.TraceInformation("Client Timeout: {0}", clientConnect.DataFeedIdentifier.Verbose());
         SubscribersDouble.UpdateIdentifier(clientConnect.DataFeedIdentifier);
     }
     return null;
 }
Ejemplo n.º 2
0
        ///// <summary>
        ///// subscribe to instrument
        ///// </summary>
        //public void Subscribe(string instrumentName)
        //{
        //    Debug.WriteLine("{0}: Subscribe(): instrumentName: {1}", this.Verbose(), instrumentName);
        //}
        /// <summary>
        /// Client Connected - Called from the client javascript page.
        /// </summary>
        public void ClientConnected(string clientId, string oldWebRoleId, string oldSignalRId)
        {
            Debug.WriteLine("{0}: ClientConnected(): clientId: {1} - Context.ConnectionId: {2}", this.Verbose(), clientId, Context.ConnectionId);

            var clientIdentifier = new PinkoMsgClientConnect
            {
                DataFeedIdentifier =
                {
                    ClientId = clientId,
                    SignalRId = Context.ConnectionId,
                    WebRoleId = WebRoleConnectManager.WebRoleId,

                    PreviousWebRoleId = oldWebRoleId,
                    PreviousSignalRId = oldSignalRId
                }
            };

            var msgEnvelop = PinkoApplication.FactorWebEnvelop(clientId, WebRoleConnectManager.WebRoleId, clientIdentifier);

            // Broadcast to all Worker roles
            msgEnvelop.QueueName = PinkoConfiguration.PinkoMessageBusToWorkerCalcEngineAllTopic; //.PinkoMessageBusToWorkerAllSubscriptionManagerTopic;
            ServerMessageBus.Publish(msgEnvelop);

            // Send to Web roles
            Clients[Context.ConnectionId].reconnectionIdentifiers(clientId, clientIdentifier.DataFeedIdentifier.SignalRId, clientIdentifier.DataFeedIdentifier.WebRoleId);
        }
        /// <summary>
        /// Process real time data subscription
        /// </summary>
        public IBusMessageOutbound ProcessConnectionChange(IBusMessageInbound envelop, PinkoMsgClientConnect clientConnect)
        {
            ClientSubscriptions.ReplaceCondition(clientConnect.DataFeedIdentifier.SubscribtionId,
                                                 x => null != x && !x.CalcExpression.DataFeedIdentifier.IsEqual(clientConnect.DataFeedIdentifier),
                                                 x =>
                                                     {
                                                         var itemClone = x.CalcExpression.DeepClone();

                                                         itemClone.DataFeedIdentifier = itemClone.DataFeedIdentifier.PartialClone(clientConnect.DataFeedIdentifier);

                                                         // Replace with new change
                                                         return new ClientSubscription {CalcExpression = itemClone};
                                                     });
            return null;
        }