📄 dispatcherjoin.java
字号:
package cn.edu.hust.cgcl.biogrid.dispatcher;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class DispatcherJoin
{
public DispatcherJoin()
{
}
private int r_mPort;//radamon monitor port
private String r_mIpAddr;
private int m_mPort;//加入端口
private String m_mIpAddr;
private String m_mId;
private String dispatcherId;
private DispatcherNode dn;
private int s_mPort;//second monitor joinning port.
private String s_mIpAddr;
private String s_mId;
//private String ipAddr;
//private int dispatcherLoad;
private static final int TIME_OUT = 30*1000;
private Socket nodeSocket = null;
private BufferedReader is;
private PrintWriter os;
public DispatcherJoin(String MonitorIpAddr, int MonitorPort,DispatcherNode dn)
{
this.dn=dn;
r_mIpAddr=MonitorIpAddr;
r_mPort=MonitorPort;
}
protected boolean join()
{
if (!joinInit(r_mIpAddr, r_mPort))
{
// ExceptionCode.exceptionCode=-2;
System.out.println("Fail to connect to a random monitor !");
return false;
}
else
{
if (!joinInMonitor(m_mIpAddr, m_mPort))
{
ExceptionCode.exceptionCode=-3;
System.out.println(
"Fail to connect to a special master monitor !");
return false;
}
else
{
dn.init(dispatcherId,m_mIpAddr,m_mId);
return true;
}
}
}
public boolean joinInit(String MonitorIpAddr, int MonitorPort)
{
boolean flag=false;
if (!initCommunication(MonitorIpAddr, MonitorPort))
{
ExceptionCode.exceptionCode=-2;
return false;
}
try
{
os.println("dispatcher join");
os.println(InetAddress.getLocalHost().getHostAddress());
os.flush();
m_mIpAddr = is.readLine();
if(m_mIpAddr.equals("LAN"))
{
ExceptionCode.exceptionCode=-4;
try
{
nodeSocket.close();
is.close();
os.close();
}
catch (IOException e)
{
log(e);
}
return false;
}
m_mPort = Integer.parseInt(is.readLine());
os.println("dispatcher join finish");
os.flush();
flag=true;
}
catch (IOException e)
{
log(e);
}
finally
{
try
{
nodeSocket.close();
is.close();
os.close();
}
catch (IOException e)
{
log(e);
}
}
if(!flag) ExceptionCode.exceptionCode=-1;
return flag;
}
private boolean initCommunication(String ipAddr, int port)
{
try
{
this.nodeSocket = new Socket(ipAddr, port);
nodeSocket.setSoTimeout(TIME_OUT);
is = new BufferedReader(new InputStreamReader(nodeSocket.
getInputStream()));
os = new PrintWriter(nodeSocket.getOutputStream());
}
catch (Exception e)
{
nodeSocket = null;
os = null;
is = null;
//iob=null;
return false;
}
return true;
}
public boolean joinInMonitor(String MonitorIpAddr, int MonitorPort)
{
boolean flag=false;
if (!initCommunication(MonitorIpAddr, MonitorPort))
{
ExceptionCode.exceptionCode=-2;
return false;
}
try
{
os.println("dispatcher join in");
os.flush();
os.println(InetAddress.getLocalHost().getHostAddress());
os.flush();
os.println(dn.getDispatcherPort());
os.flush();
os.println(dn.getWorkerPort());
os.flush();
os.println(dn.getTaskPort());
os.flush();
this.dispatcherId=is.readLine();
//System.out.println(dispatcherId);
this.m_mId=is.readLine();
if(is.readLine().equals("dispatcher join in finish"))
{
flag = true;
}else{
//....
}
}
catch (IOException e)
{
log(e);
}
finally
{
try
{
nodeSocket.close();
is.close();
os.close();
}
catch (IOException e)
{
log(e);
}
}
return flag;
}
private void log(Exception e)
{
e.printStackTrace();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -