VM connection: Fixed checking running VM.
authorminkee.lee <minkee.lee@samsung.com>
Sat, 2 May 2015 05:57:00 +0000 (14:57 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Thu, 14 May 2015 05:36:02 +0000 (14:36 +0900)
- Added handling logic for connection pending.

Change-Id: I075e5a31edc5b92dc0f5eb92886749590e7d5b2a
Signed-off-by: minkee.lee <minkee.lee@samsung.com>
(cherry picked from commit 0ccc24d8c8eb9b58e098e27c4c10d3a60473e8f0)

common-project/src/org/tizen/emulator/manager/vms/helper/CheckingRunningEmulator.java
common-project/src/org/tizen/emulator/manager/vms/helper/RefreshWorker.java
common-project/src/org/tizen/emulator/manager/vms/helper/VMSocket.java

index ca7822b..65a7301 100644 (file)
@@ -341,7 +341,7 @@ public class CheckingRunningEmulator {
                                                        it.remove();
                                                }
                                        } catch (Exception e) {
-                                               EMLogger.getLogger().warning(e.getMessage());
+                                               EMLogger.getLogger().warning("Selector error : " + e.getMessage());
                                        }
                                }
                        }
@@ -401,18 +401,33 @@ public class CheckingRunningEmulator {
                private void checkConnection(SelectionKey key) {
                        SocketChannel sc = (SocketChannel)key.channel();
                        VMSocket vms = (VMSocket)key.attachment();
+                       boolean isReady = false;
+
                        if (sc.isConnected()) {
-                               // Register to selector with read_event and send message to ECS
-                               if (addToRegisterQueue(vms, SelectionKey.OP_READ)) {
-                                       vms.sendDeviceReq();
-                               } else {
-                                       //EMLogger.getLogger().warning("Connect to ECS(port:" + vms.getEcs_port() + ") Fail.");
-                                       vms.disconnect();
+                               isReady = addToRegisterQueue(vms, SelectionKey.OP_READ);
+
+                       } else {
+                               try {
+                                       if (sc.finishConnect()) {
+                                               // Connect success
+                                               isReady = addToRegisterQueue(vms, SelectionKey.OP_READ);
+                                       } else {
+                                               // Connect pending.
+                                               EMLogger.getLogger().info("Connection not completed yet : " + vms.getEcs_port());
+                                               return;
+                                       }
+                               } catch (IOException e) { // Connection failed.
+                                       isReady = false;
                                }
+                       }
+
+                       if (isReady) {
+                               EMLogger.getLogger().info("Connection success : " + vms.getEcs_port());
+                               vms.sendDeviceReq();
+
                        } else {
-                               // Close socket
+                               // EMLogger.getLogger().info("Connection fail : " + vms.getEcs_port());
                                vms.disconnect();
-                               EMLogger.getLogger().info("Connect to ECS(port:" + vms.getEcs_port() + ") Fail.");
                        }
                }
 
index 791eaab..e4ae4ae 100644 (file)
@@ -81,7 +81,7 @@ public class RefreshWorker {
                                EMLogger.getLogger().warning(e.getMessage());
                        }
                }
-               EMLogger.getLogger().warning("Refresh : re-connect complete");
+               EMLogger.getLogger().info("Refresh complete");
 
                // Change VMs' running state
                for (VMProperty prop : (VMProperty[])(EmulatorVMList.getInstance().getProperties())) {
index 2419f79..4db3189 100644 (file)
@@ -98,38 +98,26 @@ public class VMSocket {
        }
 
        public boolean connect() {
+               // Add socket to selector and try connect.
+               // Connection process is completed by selector event.
                try {
                        socket = SocketChannel.open();
                        socket.configureBlocking(false);
-                       if (!socket.connect(new InetSocketAddress("localhost", ecs_port))) {
-                               if (!socket.finishConnect()) {
-                                       // Connection not complete yet. So postpone checking of this connection later
-                                       // by registering this socket to selector.
-                                       if (CheckingRunningEmulator.addToRegisterQueue(this, SelectionKey.OP_CONNECT)) {
-                                               return true;
-                                       } else {
-                                               EMLogger.getLogger().warning("Connect to ECS(port:" + ecs_port +") Fail.");
-                                               disconnect();
-                                       }
-                               }
+
+                       if (CheckingRunningEmulator.addToRegisterQueue(this, SelectionKey.OP_CONNECT)) {
+                                       socket.connect(new InetSocketAddress("localhost", ecs_port));
+
+                       } else {
+                               EMLogger.getLogger().warning("Add to selector(connect event) fail :" + ecs_port);
+                               disconnect();
                        }
-                       EMLogger.getLogger().info("Connected to ECS(port:" + ecs_port + ")");
+
                } catch (IOException e) {
-                       //EMLogger.getLogger().info("Connect to ECS(port:" + ecs_port +") Fail." + e.getMessage());
+                       // EMLogger.getLogger().info("Connect fail.(" + e.getMessage() + ") - " + ecs_port);
                        disconnect();
                        return false;
                }
 
-               if (socket != null) {
-                       // success to connection
-                       if (CheckingRunningEmulator.addToRegisterQueue(this, SelectionKey.OP_READ)) {
-                               sendDeviceReq();
-                       } else {
-                               EMLogger.getLogger().warning("Connect to ECS(port:" + ecs_port +") Fail.");
-                               disconnect();
-                               return false;
-                       }
-               }
                return true;
        }