/// <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; }
///// <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; }