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();
             }
         }
     }
 }
Example #2
0
 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();
             }
         }
     }
 }