private void RegisterToCallStateChangeEvent(string callConnectionId) { callEstablishedTask = new TaskCompletionSource <bool>(TaskContinuationOptions.RunContinuationsAsynchronously); reportCancellationToken.Register(() => callEstablishedTask.TrySetCanceled()); callTerminatedTask = new TaskCompletionSource <bool>(TaskContinuationOptions.RunContinuationsAsynchronously); //Set the callback method var callStateChangeNotificaiton = new NotificationCallback((CallingServerEventBase callEvent) => { var callStateChanged = (CallConnectionStateChangedEvent)callEvent; Logger.LogMessage(Logger.MessageType.INFORMATION, $"Call State changed to: {callStateChanged.CallConnectionState}"); if (callStateChanged.CallConnectionState == CallConnectionState.Connected) { callEstablishedTask.TrySetResult(true); } else if (callStateChanged.CallConnectionState == CallConnectionState.Disconnected) { EventDispatcher.Instance.Unsubscribe(CallingServerEventType.CallConnectionStateChangedEvent.ToString(), callConnectionId); reportCancellationTokenSource.Cancel(); callTerminatedTask.SetResult(true); } }); //Subscribe to the event var eventId = EventDispatcher.Instance.Subscribe(CallingServerEventType.CallConnectionStateChangedEvent.ToString(), callConnectionId, callStateChangeNotificaiton); }
public bool Subscribe(string eventType, string eventKey, NotificationCallback notificationCallback) { string eventId = BuildEventKey(eventType, eventKey); return(notificationCallbacks.TryAdd(eventId, notificationCallback)); }