io.netty.handler.codec.http.websocketx.CloseWebSocketFrame # release ( ) 源码实例Demo

下面列出了 io.netty.handler.codec.http.websocketx.CloseWebSocketFrame # release ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。


Mono<Void> sendClose(CloseWebSocketFrame frame) {
	if (CLOSE_SENT.get(this) == 0) {
		//commented for now as we assume the close is always scheduled (deferFuture runs)
		//onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame));
		return FutureMono.deferFuture(() -> {
			if (CLOSE_SENT.getAndSet(this, 1) == 0) {
				discard();
				onCloseState.onNext(new WebSocketCloseStatus(frame.statusCode(), frame.reasonText()));
				return channel().writeAndFlush(frame)
				                .addListener(ChannelFutureListener.CLOSE);
			}
			frame.release();
			return channel().newSucceededFuture();
		}).doOnCancel(() -> ReactorNetty.safeRelease(frame));
	}
	frame.release();
	return Mono.empty();
}
 

@SuppressWarnings("FutureReturnValueIgnored")
void sendCloseNow(@Nullable CloseWebSocketFrame frame) {
	if (frame != null && !frame.isFinalFragment()) {
		//"FutureReturnValueIgnored" this is deliberate
		channel().writeAndFlush(frame);
		return;
	}
	if (CLOSE_SENT.getAndSet(this, 1) == 0) {
		if (frame != null) {
			onCloseState.onNext(new WebSocketCloseStatus(frame.statusCode(), frame.reasonText()));
			channel().writeAndFlush(frame)
			         .addListener(ChannelFutureListener.CLOSE);
		} else {
			onCloseState.onNext(new WebSocketCloseStatus(-1, ""));
			channel().writeAndFlush(new CloseWebSocketFrame())
			         .addListener(ChannelFutureListener.CLOSE);
		}
	}
	else if (frame != null) {
		frame.release();
	}
}
 

Mono<Void> sendClose(CloseWebSocketFrame frame) {
	if (CLOSE_SENT.get(this) == 0) {
		//commented for now as we assume the close is always scheduled (deferFuture runs)
		//onTerminate().subscribe(null, null, () -> ReactorNetty.safeRelease(frame));
		return FutureMono.deferFuture(() -> {
			if (CLOSE_SENT.getAndSet(this, 1) == 0) {
				discard();
				onCloseState.onNext(new WebSocketCloseStatus(frame.statusCode(), frame.reasonText()));
				return channel().writeAndFlush(frame)
				                .addListener(ChannelFutureListener.CLOSE);
			}
			frame.release();
			return channel().newSucceededFuture();
		}).doOnCancel(() -> ReactorNetty.safeRelease(frame));
	}
	frame.release();
	return Mono.empty();
}
 

@SuppressWarnings("FutureReturnValueIgnored")
void sendCloseNow(@Nullable CloseWebSocketFrame frame, ChannelFutureListener listener) {
	if (frame != null && !frame.isFinalFragment()) {
		//"FutureReturnValueIgnored" this is deliberate
		channel().writeAndFlush(frame);
		return;
	}
	if (CLOSE_SENT.getAndSet(this, 1) == 0) {
		if (frame != null) {
			onCloseState.onNext(new WebSocketCloseStatus(frame.statusCode(), frame.reasonText()));
			channel().writeAndFlush(frame)
			         .addListener(listener);
		} else {
			onCloseState.onNext(new WebSocketCloseStatus(-1, ""));
			channel().writeAndFlush(new CloseWebSocketFrame())
			         .addListener(listener);
		}
	}
	else if (frame != null) {
		frame.release();
	}
}