/** * openConnections: open the connection to the master. has retry mechanism * * @return: true if the connection is built, false if failed */ public boolean openConnections() { _log("Try to connect to Master..."); int i = 0; while (true) { boolean isConnected = connect(); if (!isConnected) { i++; if (i == DropboxConstants.MAX_TRY) { break; } _log("Cannot connect to Master, retry " + i); try { Thread.sleep(DropboxConstants.TRY_CONNECT_MILLIS); } catch (InterruptedException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } _log("Retry connection is interrupted"); break; } } else { _log("Success!"); return true; } } _log("Failed"); return false; }
/** listen: start to listen if there is any clients connected */ public void listen() { // Firstly spawn a new thread and then the main thread // also start listening _userNet = new DropboxFileServerUserNet(_server, _userOut, _userIn, _userSock); _userNet.start(); /* Use main thread, cannot be stopped */ while (_sock != null && !_sock.isClosed()) { try { String line = NetComm.receive(_in); _dlog(line); parse(line); } catch (Exception e) { if (!_server.noException()) { _elog(e.toString()); } break; // Break the loop } } /* Clear */ // Close main thread clear(); // Cancel the listening thread and retry _server.cancelListeningThread(); /* Also cancel all of the syncers */ _server.cancelSyncers(); // Retry after try { _log( "The connection to master is broken," + " reset everything and retry connection after " + DropboxConstants.TRY_CONNECT_MILLIS + " milliseconds"); Thread.sleep(DropboxConstants.TRY_CONNECT_MILLIS); } catch (InterruptedException e) { if (!_server.noException()) { _elog(e.toString()); } if (_server.debugMode()) { e.printStackTrace(); } } _server.run(); clear(); _log(_threadName + " is stopped"); }