From 716a7097c06a581f1ee852e68f419d1a4193e117 Mon Sep 17 00:00:00 2001 From: "minkee.lee" Date: Sat, 2 May 2015 14:57:00 +0900 Subject: [PATCH] VM connection: Fixed checking running VM. - Added handling logic for connection pending. Change-Id: I075e5a31edc5b92dc0f5eb92886749590e7d5b2a Signed-off-by: minkee.lee (cherry picked from commit 0ccc24d8c8eb9b58e098e27c4c10d3a60473e8f0) --- .../vms/helper/CheckingRunningEmulator.java | 33 +++++++++++++++------ .../emulator/manager/vms/helper/RefreshWorker.java | 2 +- .../emulator/manager/vms/helper/VMSocket.java | 34 +++++++--------------- 3 files changed, 36 insertions(+), 33 deletions(-) diff --git a/common-project/src/org/tizen/emulator/manager/vms/helper/CheckingRunningEmulator.java b/common-project/src/org/tizen/emulator/manager/vms/helper/CheckingRunningEmulator.java index ca7822b..65a7301 100644 --- a/common-project/src/org/tizen/emulator/manager/vms/helper/CheckingRunningEmulator.java +++ b/common-project/src/org/tizen/emulator/manager/vms/helper/CheckingRunningEmulator.java @@ -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."); } } diff --git a/common-project/src/org/tizen/emulator/manager/vms/helper/RefreshWorker.java b/common-project/src/org/tizen/emulator/manager/vms/helper/RefreshWorker.java index 791eaab..e4ae4ae 100644 --- a/common-project/src/org/tizen/emulator/manager/vms/helper/RefreshWorker.java +++ b/common-project/src/org/tizen/emulator/manager/vms/helper/RefreshWorker.java @@ -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())) { diff --git a/common-project/src/org/tizen/emulator/manager/vms/helper/VMSocket.java b/common-project/src/org/tizen/emulator/manager/vms/helper/VMSocket.java index 2419f79..4db3189 100644 --- a/common-project/src/org/tizen/emulator/manager/vms/helper/VMSocket.java +++ b/common-project/src/org/tizen/emulator/manager/vms/helper/VMSocket.java @@ -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; } -- 2.7.4