package com.alipay.bluewhale.core.messaging;
import org.zeromq.ZMQ.Context;
import org.zeromq.ZMQ.Socket;
import com.alipay.bluewhale.core.zilch.ZeroMq;
import com.alipay.bluewhale.core.zilch.VirtualPort;
public class ZMQContext implements IContext, IZMQContext {
private org.zeromq.ZMQ.Context context;
private Socket socket;
private int linger_ms;
private boolean ipc;
public ZMQContext(org.zeromq.ZMQ.Context _context, int _linger_ms,
boolean _ipc) {
context = _context;
linger_ms = _linger_ms;
ipc = _ipc;
}
@Override
public IConnection bind(String topologyid, int virtual_port) {
this.socket = ZeroMq.socket(context, ZeroMq.pull);
this.socket = VirtualPort.virtual_bind(socket, virtual_port);
return new ZMQConnection(socket);
}
@Override
public IConnection connect(String storm_id, String host, int port) {
String url = null;
if (ipc) {
url = "ipc://" + port + ".ipc";
} else {
url = "tcp://" + host + ":" + port;
}
this.socket = ZeroMq.socket(context, ZeroMq.push);
this.socket = ZeroMq.set_linger(socket, linger_ms);
this.socket = ZeroMq.connect(socket, url);
return new ZMQConnection(socket);
}
@Override
public void send_local_task_empty(String storm_id, int virtual_port) {
Socket pusher = ZeroMq.socket(context, ZeroMq.push);
pusher = VirtualPort.virtual_connect(pusher, virtual_port);
ZeroMq.send(pusher, new byte[0]);
pusher.close();
};
@Override
public void term() {
context.term();
}
@Override
public Context zmq_context() {
return context;
}
}