public void HandleEventsAsync(IHmeConnection connection) { HmeConnectionWrapper wrapper = connection as HmeConnectionWrapper; if (wrapper != null) { ApplicationEventsData data = new ApplicationEventsData { DriverGuid = _thisGuid, ConnectionGuid = Guid.NewGuid() }; _connections.Add(data.ConnectionGuid, wrapper.HmeConnection); wrapper.HmeConnection.BeginHandleEvent(ApplicationEventsHandled, data); } }
private static void ApplicationEventsHandled(IAsyncResult result) { // this is done so that only guids cross appdomain boundary ApplicationEventsData eventsData = (ApplicationEventsData)result.AsyncState; HmeApplicationDriver driver = _instances[eventsData.DriverGuid]; HmeConnection connection = driver._connections[eventsData.ConnectionGuid]; connection.EndHandleEvent(result); if (connection.Application.IsConnected) { connection.BeginHandleEvent(ApplicationEventsHandled, result.AsyncState); } else { driver._connections.Remove(eventsData.ConnectionGuid); driver.OnApplicationEnded(MyApplicationEndedEventArgs.Empty); } }