protected void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message) { if (message.ChannelName == DialogManagerMessaging.CHANNEL) { DialogManagerMessaging.MessageType messageType = (DialogManagerMessaging.MessageType)message.MessageType; if (messageType == DialogManagerMessaging.MessageType.DialogClosed) { Guid dialogHandle = (Guid)message.MessageData[DialogManagerMessaging.DIALOG_HANDLE]; bool doConfigure = false; lock (_syncRoot) if (_doConfigureDialogHandle == dialogHandle) { _doConfigureDialogHandle = Guid.Empty; DialogResult dialogResult = (DialogResult)message.MessageData[DialogManagerMessaging.DIALOG_RESULT]; if (dialogResult == DialogResult.Yes) { doConfigure = true; } } if (doConfigure) { DoCreateConfiguration(); } } } }
public DialogCloseWatcher(object owner, Guid dialogHandleId, CloseHandlerDlgt handler) { _watcher = new MessageWatcher(owner, DialogManagerMessaging.CHANNEL, message => { if (message.ChannelName == DialogManagerMessaging.CHANNEL) { DialogManagerMessaging.MessageType messageType = (DialogManagerMessaging.MessageType)message.MessageType; if (messageType == DialogManagerMessaging.MessageType.DialogClosed) { Guid closedDialogHandle = (Guid)message.MessageData[DialogManagerMessaging.DIALOG_HANDLE]; DialogResult dialogResult = (DialogResult)message.MessageData[DialogManagerMessaging.DIALOG_RESULT]; if (closedDialogHandle == dialogHandleId) { if (handler != null) { handler(dialogResult); } return(true); } } } return(false); }, true); _watcher.Start(); }
private void OnMessageReceived(AsynchronousMessageQueue queue, SystemMessage message) { if (message.ChannelName == ServerConnectionMessaging.CHANNEL) { ServerConnectionMessaging.MessageType messageType = (ServerConnectionMessaging.MessageType)message.MessageType; switch (messageType) { case ServerConnectionMessaging.MessageType.AvailableServersChanged: ICollection <ServerDescriptor> availableServers = (ICollection <ServerDescriptor>) message.MessageData[ServerConnectionMessaging.AVAILABLE_SERVERS]; SynchronizeAvailableServers(); Mode mode; lock (_syncObj) mode = _mode; if (mode == Mode.AttachToServer) { if (_autoCloseOnNoServer && availableServers.Count == 0) { LeaveConfiguration(); return; } } break; } } else if (message.ChannelName == DialogManagerMessaging.CHANNEL) { DialogManagerMessaging.MessageType messageType = (DialogManagerMessaging.MessageType)message.MessageType; if (messageType == DialogManagerMessaging.MessageType.DialogClosed) { Guid dialogHandle = (Guid)message.MessageData[DialogManagerMessaging.DIALOG_HANDLE]; bool leaveConfiguration = false; bool doDetach = false; lock (_syncObj) if (_attachInfoDialogHandle == dialogHandle) { _attachInfoDialogHandle = null; leaveConfiguration = true; } else if (_detachConfirmDialogHandle == dialogHandle) { DialogResult dialogResult = (DialogResult)message.MessageData[DialogManagerMessaging.DIALOG_RESULT]; _detachConfirmDialogHandle = Guid.Empty; if (dialogResult == DialogResult.Yes) { doDetach = true; } leaveConfiguration = true; } // Do the next two statements outside our lock if (doDetach) { DoDetachFromHomeServer(); } if (leaveConfiguration) { LeaveConfiguration(); } } } }