feat: complate sockt.io server

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2020-03-23 18:33:12 +08:00
parent f4b461409b
commit 0ed3f1fbd5
8 changed files with 288 additions and 61 deletions

View File

@ -1,5 +1,6 @@
import { EventEmitter } from 'events'
import { SocketIO } from 'socket-io/interfaces';
import { Keys, AttributeKeys } from './constants';
const TextWebSocketFrame = Java.type('io.netty.handler.codec.http.websocketx.TextWebSocketFrame')
@ -17,6 +18,12 @@ export class NettyClient extends EventEmitter implements SocketIO.EngineSocket {
constructor(server: any, channel: any) {
super();
this.server = server;
this.readyState = 'open';
this.remoteAddress = channel.remoteAddress() + ''
this.upgraded = true;
this.request = channel.attr(AttributeKeys.Request).get();
this.transport = null;
this.channel = channel;
this._id = channel.id();
}
@ -27,4 +34,7 @@ export class NettyClient extends EventEmitter implements SocketIO.EngineSocket {
send(text: string) {
this.channel.writeAndFlush(new TextWebSocketFrame(text))
}
close() {
this.channel.close();
}
}

View File

@ -6,8 +6,14 @@ export enum ServerEvent {
disconnect = 'disconnect'
}
const AttributeKey = Java.type('io.netty.util.AttributeKey');
export enum Keys {
Detect = "miao_detect",
Handler = "miaowebsocket",
Default = "DefaultChannelPipeline"
}
export enum AttributeKeys {
Request = AttributeKey.valueOf('request')
}

View File

@ -1,4 +1,5 @@
import { HttpRequestHandlerAdapter } from '../netty'
import { Keys, AttributeKeys } from './constants'
const DefaultHttpResponse = Java.type('io.netty.handler.codec.http.DefaultHttpResponse')
const DefaultFullHttpResponse = Java.type('io.netty.handler.codec.http.DefaultFullHttpResponse')
@ -31,6 +32,7 @@ export class HttpRequestHandler extends HttpRequestHandlerAdapter {
}
channelRead0(ctx: any, request: any) {
if (request.getUri().startsWith(this.ws)) {
ctx.channel().attr(AttributeKeys.Request).set(request);
ctx.fireChannelRead(request.retain())
} else {
ctx.executor().execute(new Runnable({

View File

@ -36,6 +36,9 @@ class NettyWebSocketServer {
if (this.pipeline.names().contains(Keys.Detect)) {
this.pipeline.remove(Keys.Detect)
}
Object.values(this.allClients).forEach(client => {
client.close();
})
}
on(event: string, listener: (...args: any[]) => void) {