@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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')
|
||||
}
|
@ -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({
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user