use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.
the class HttpProxyServer method strtup.
public synchronized void strtup(NioEventLoopGroup group, int port) throws Exception {
if (context != null && context.isActive()) {
return;
}
IoEventHandle eventHandle = new IoEventHandle() {
@Override
public void accept(Channel ch_src, Frame frame) throws Exception {
final HttpFrame f = (HttpFrame) frame;
if (f.getMethod() == HttpMethod.CONNECT) {
ch_src.writeAndFlush(CONNECT_RES_BUF.duplicate());
HttpProxyAttr s = HttpProxyAttr.get(ch_src);
String[] arr = f.getHost().split(":");
s.host = arr[0];
s.port = Integer.parseInt(arr[1]);
s.handshakeFinished = true;
} else {
String host = f.getHost();
String[] arr = host.split(":");
int port = 80;
if (arr.length == 2) {
port = Integer.parseInt(arr[1]);
}
if (f.getRequestHeaders().remove(HttpHeader.Proxy_Connection.getId()) == null) {
return;
}
NioEventLoop el = ch_src.getEventLoop();
ChannelConnector context = new ChannelConnector(el, arr[0], port);
context.addProtocolCodec(new ClientHttpCodec());
context.setIoEventHandle(new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
ClientHttpFrame res = (ClientHttpFrame) frame;
IntObjectMap<String> hs = res.getResponse_headers();
for (hs.scan(); hs.hasNext(); ) {
String v = hs.getValue();
if (v == null) {
continue;
}
if (hs.getKey() == HttpHeader.Content_Length.getId() || hs.getKey() == HttpHeader.Connection.getId() || hs.getKey() == HttpHeader.Transfer_Encoding.getId() || hs.getKey() == HttpHeader.Content_Encoding.getId()) {
continue;
}
f.setResponseHeader(hs.getKey(), v.getBytes());
}
if (res.getContent() != null) {
f.setContent(res.getContent());
} else if (res.isChunked()) {
f.setString("not support chunked now.", ch);
}
ch_src.writeAndFlush(f);
ch.close();
}
});
String url = parseRequestURL(f.getRequestURL());
context.setPrintConfig(false);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.connect((ch, ex) -> {
if (ex == null) {
ClientHttpFrame req = new ClientHttpFrame(url, f.getMethod());
req.setRequestHeaders(f.getRequestHeaders());
req.getRequestHeaders().remove(HttpHeader.Proxy_Connection.getId());
if (f.getMethod() == HttpMethod.POST) {
req.setContent(f.getContent());
}
try {
ch.writeAndFlush(req);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
};
context = new ChannelAcceptor(group, 8088);
context.addProtocolCodec(new HttpProxyCodec());
context.setIoEventHandle(eventHandle);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.bind();
}
use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.
the class TestHttpBootstrapEngine method bootstrap.
@Override
public void bootstrap(String rootPath, boolean prodMode) throws Exception {
ClassLoader cl = this.getClass().getClassLoader();
boolean debug = Util.isTrueValue(System.getProperty("http.debug"));
if (debug) {
for (; debug; ) {
Util.sleep(100);
}
}
DevelopConfig.NATIVE_DEBUG = true;
DevelopConfig.BUF_DEBUG = true;
DevelopConfig.BUF_PATH_DEBUG = true;
DevelopConfig.SSL_DEBUG = true;
DevelopConfig.CHANNEL_DEBUG = true;
DevelopConfig.DEBUG_ERROR = true;
Options.setEnableEpoll(true);
Options.setEnableUnsafe(true);
Options.setEnableOpenssl(true);
Options.setBufThreadYield(true);
// Options.setEnableUnsafeBuf(true);
HttpDateUtil.start();
final SpringHttpFrameHandle handle = new SpringHttpFrameHandle();
Properties properties = FileUtil.readPropertiesByCls("server.properties", cl);
NioEventLoopGroup group = new NioEventLoopGroup(true);
ChannelAcceptor context = new ChannelAcceptor(group);
ConfigurationParser.parseConfiguration("server.", context, properties);
ConfigurationParser.parseConfiguration("server.", group, properties);
context.setIoEventHandle(handle);
context.addChannelIdleEventListener(new ChannelAliveListener());
context.addChannelEventListener(new WebSocketChannelListener());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addChannelEventListener(new CountChannelListener());
context.setExecutorGroup(new ThreadEventLoopGroup());
context.addLifeCycleListener(new LifeCycleListener() {
@Override
public void lifeCycleStarting(LifeCycle lifeCycle) {
try {
handle.initialize(context, rootPath, prodMode);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
@Override
public void lifeCycleStopped(LifeCycle lifeCycle) {
handle.destroy(context);
}
});
String[] applicationProtocols = null;
if (properties.getBooleanProperty("app.enableHttp2")) {
context.addProtocolCodec(new Http2Codec());
applicationProtocols = new String[] { "h2", "http/1.1" };
} else {
context.addProtocolCodec(new HttpCodec(4));
context.addProtocolCodec(new WebSocketCodec());
}
int defaultPort = 80;
String pem = properties.getProperty("server.sslPem");
if (!Util.isNullOrBlank(pem)) {
defaultPort = 443;
SslContext sslContext = loadSslContextFromPem(pem, applicationProtocols, cl);
context.setSslContext(sslContext);
}
int port = properties.getIntegerProperty("server.port", defaultPort);
context.setPort(port);
try {
context.bind();
} catch (Exception e) {
HttpDateUtil.stop();
group.stop();
throw e;
}
this.group = group;
this.context = context;
if (properties.getBooleanProperty("app.proxy")) {
NetDataTransferServer.get().startup(group, 18088);
}
}
use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.
the class HttpProxy4CloudServer method strtup.
public synchronized void strtup(NioEventLoopGroup serverG, int port) throws Exception {
if (context != null && context.isActive()) {
return;
}
context = new ChannelAcceptor(serverG, 8088);
context.addProtocolCodec(new HttpProxy4CloudCodec());
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addChannelEventListener(new ChannelEventListenerAdapter() {
@Override
public void channelClosed(Channel ch) {
Util.close(((HttpProxy4CloudAttr) ch.getAttachment()).target);
}
});
context.bind();
}
use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.
the class TestLengthValueBroadcastServer method main.
public static void main(String[] args) throws Exception {
final ChannelManagerListener channelManagerListener = new ChannelManagerListener();
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
LengthValueFrame f = (LengthValueFrame) frame;
frame.write("yes server already accept your message:", ch);
frame.write(f.getStringContent(), ch);
ch.writeAndFlush(f);
}
};
ChannelAcceptor context = new ChannelAcceptor(8300);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addChannelEventListener(new SetOptionListener());
context.addChannelEventListener(channelManagerListener);
context.setIoEventHandle(eventHandleAdaptor);
context.addProtocolCodec(new LengthValueCodec());
context.bind();
Util.exec(() -> {
for (; ; ) {
Util.sleep(1000);
LengthValueFrame frame = new LengthValueFrame();
frame.setContent("broadcast msg ........".getBytes());
try {
channelManagerListener.broadcast(frame);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.
the class TestHttpLoadServer method main.
public static void main(String[] args) throws Exception {
IoEventHandle eventHandle = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
HttpFrame f = (HttpFrame) frame;
f.setConnection(HttpConnection.KEEP_ALIVE);
f.setContentType(HttpContentType.text_plain);
f.setString("Hello World", ch);
ch.writeAndFlush(f);
ch.release(f);
}
};
NioEventLoopGroup group = new NioEventLoopGroup();
group.setMemoryCapacity(1024 * 1024 * 64);
group.setMemoryUnit(512);
group.setEventLoopSize(2);
ChannelAcceptor context = new ChannelAcceptor(group, 8080);
context.addProtocolCodec(new HttpCodec(8));
context.addProtocolCodec(new WebSocketCodec());
context.setIoEventHandle(eventHandle);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.bind();
}
Aggregations