diff src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java @ 407:7cd416d6a152

Show port Error dialog to server change client
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Mon, 16 Nov 2015 19:05:19 +0900
parents 0eea469c6349
children bbd844c15ab1
line wrap: on
line diff
--- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Mon Nov 09 15:44:53 2015 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Mon Nov 16 19:05:19 2015 +0900
@@ -31,10 +31,7 @@
 import com.glavsoft.rfb.protocol.ProtocolContext;
 import com.glavsoft.rfb.protocol.ProtocolSettings;
 import com.glavsoft.utils.Keymap;
-import com.glavsoft.viewer.ConnectionPresenter;
-import com.glavsoft.viewer.UiSettings;
-import com.glavsoft.viewer.Viewer;
-import com.glavsoft.viewer.ViewerInterface;
+import com.glavsoft.viewer.*;
 import com.glavsoft.viewer.swing.gui.OptionsDialog;
 
 import javax.swing.*;
@@ -44,6 +41,7 @@
 
 import java.awt.*;
 import java.awt.event.*;
+import java.net.Socket;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -913,8 +911,6 @@
     }
 
     public void screenChangeRequest(ProtocolContext context, int shareScreenNumber) {
-        viewer.setVisible(false);
-
         float scaleFactor = getMyDisplayScaleFactor();
         ArrayList<Rectangle> rectangles = viewer.getScreenRectangles();
         int leftScreenNumber = 0;
@@ -923,16 +919,35 @@
         viewer.getRfb().setSingleDisplaySize(singleWidth, singleHeight);
         if (viewer.getRfb().hasParent()) {
             String adr = viewer.getRfb().getMyAddress();
-            // -1 means request to reverse direct connection socket
-            short id = viewer.getRfb().isTreeManager()? (short)-1 : viewer.getRfb().getId();
-            context.sendMessage(new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, id, singleWidth, singleHeight, shareScreenNumber));
+                if (portScan(adr, ConnectionParams.DEFAULT_RFB_PORT)) {
+                    // -1 means request to reverse direct connection socket
+                    short id = viewer.getRfb().isTreeManager()? (short)-1 : viewer.getRfb().getId();
+                    context.sendMessage(new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, id, singleWidth, singleHeight, shareScreenNumber));
+                }
         }
+
         if (viewer.getRfb().isTreeManager()) {
             changeVncServer(viewer, singleWidth, singleHeight, shareScreenNumber, viewer.getRfb().getId());
             return;
         }
     }
 
+    private boolean portScan(String adr, int port) {
+        try {
+            Socket socket = new Socket(adr, port);
+            socket.close();
+            return true;
+        } catch (Exception e) {
+            String message =  "Please screen sharing settings";
+            // show error panel
+            presenter.showPortErrorDialog(message);
+            presenter.clearMessage();
+            return false;
+        }
+    }
+
+
+
     private float getMyDisplayScaleFactor() {
         final String CONTENT_SCALE_FACTOR = "java.awt.contentScaleFactor";
         Float scaleFactor = (Float) Toolkit.getDefaultToolkit().getDesktopProperty(CONTENT_SCALE_FACTOR);