[FIX] Исправлена гонка потоков, исправлен reconnect loop, пофикшен вывод ошибок

This commit is contained in:
Gravit 2019-04-29 15:35:51 +07:00
parent a921fde598
commit edc5f1f7b2
No known key found for this signature in database
GPG key ID: 061981E1E85D3216
5 changed files with 19 additions and 17 deletions

View file

@ -9,6 +9,7 @@
import ru.gravit.launcher.managers.ClientGsonManager; import ru.gravit.launcher.managers.ClientGsonManager;
import ru.gravit.launcher.managers.ConsoleManager; import ru.gravit.launcher.managers.ConsoleManager;
import ru.gravit.launcher.request.Request; import ru.gravit.launcher.request.Request;
import ru.gravit.launcher.request.RequestException;
import ru.gravit.launcher.request.auth.RestoreSessionRequest; import ru.gravit.launcher.request.auth.RestoreSessionRequest;
import ru.gravit.launcher.request.websockets.StandartClientWebSocketService; import ru.gravit.launcher.request.websockets.StandartClientWebSocketService;
import ru.gravit.utils.helper.CommonHelper; import ru.gravit.utils.helper.CommonHelper;
@ -84,7 +85,8 @@ public void start(String... args) throws Throwable {
Request.service.open(); Request.service.open();
LogHelper.debug("Connect to %s", Launcher.getConfig().address); LogHelper.debug("Connect to %s", Launcher.getConfig().address);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LogHelper.error(e);
throw new RequestException(String.format("Connect error: %s", e.getMessage() != null ? e.getMessage() : "null"));
} }
try { try {
RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession()); RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession());

View file

@ -9,6 +9,7 @@
import ru.gravit.launcher.profiles.ClientProfile; import ru.gravit.launcher.profiles.ClientProfile;
import ru.gravit.launcher.profiles.PlayerProfile; import ru.gravit.launcher.profiles.PlayerProfile;
import ru.gravit.launcher.request.Request; import ru.gravit.launcher.request.Request;
import ru.gravit.launcher.request.RequestException;
import ru.gravit.launcher.request.auth.RestoreSessionRequest; import ru.gravit.launcher.request.auth.RestoreSessionRequest;
import ru.gravit.launcher.serialize.HInput; import ru.gravit.launcher.serialize.HInput;
import ru.gravit.launcher.serialize.HOutput; import ru.gravit.launcher.serialize.HOutput;
@ -462,7 +463,8 @@ public static void main(String... args) throws Throwable {
Request.service.open(); Request.service.open();
LogHelper.debug("Connect to %s", Launcher.getConfig().address); LogHelper.debug("Connect to %s", Launcher.getConfig().address);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LogHelper.error(e);
throw new RequestException(String.format("Connect error: %s", e.getMessage() != null ? e.getMessage() : "null"));
} }
try { try {
RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession()); RestoreSessionRequest request1 = new RestoreSessionRequest(Request.getSession());

View file

@ -35,14 +35,6 @@ public ClientJSONPoint(final String uri) throws SSLException {
public ClientJSONPoint(URI uri) throws SSLException { public ClientJSONPoint(URI uri) throws SSLException {
this.uri = uri; this.uri = uri;
// Connect with V13 (RFC 6455 aka HyBi-17). You can change it to V08 or V00.
// If you change it to V00, ping is not supported and remember to change
// HttpResponseDecoder to WebSocketHttpResponseDecoder in the pipeline.
webSocketClientHandler =
new WebSocketClientHandler(
WebSocketClientHandshakerFactory.newHandshaker(
uri, WebSocketVersion.V13, null, false, EmptyHttpHeaders.INSTANCE, 1280000), this);
String protocol = uri.getScheme(); String protocol = uri.getScheme();
if (!"ws".equals(protocol) && !"wss".equals(protocol)) { if (!"ws".equals(protocol) && !"wss".equals(protocol)) {
throw new IllegalArgumentException("Unsupported protocol: " + protocol); throw new IllegalArgumentException("Unsupported protocol: " + protocol);
@ -74,6 +66,10 @@ public void initChannel(SocketChannel ch) throws Exception {
public void open() throws Exception { public void open() throws Exception {
//System.out.println("WebSocket Client connecting"); //System.out.println("WebSocket Client connecting");
webSocketClientHandler =
new WebSocketClientHandler(
WebSocketClientHandshakerFactory.newHandshaker(
uri, WebSocketVersion.V13, null, false, EmptyHttpHeaders.INSTANCE, 1280000), this);
ch = bootstrap.connect(uri.getHost(), uri.getPort()).sync().channel(); ch = bootstrap.connect(uri.getHost(), uri.getPort()).sync().channel();
webSocketClientHandler.handshakeFuture().sync(); webSocketClientHandler.handshakeFuture().sync();
} }
@ -89,8 +85,12 @@ public ChannelFuture send(String text)
public void close() throws InterruptedException { public void close() throws InterruptedException {
//System.out.println("WebSocket Client sending close"); //System.out.println("WebSocket Client sending close");
isClosed = true; isClosed = true;
ch.writeAndFlush(new CloseWebSocketFrame()); if(ch != null && ch.isActive())
ch.closeFuture().sync(); {
ch.writeAndFlush(new CloseWebSocketFrame());
ch.closeFuture().sync();
}
//group.shutdownGracefully(); //group.shutdownGracefully();
} }

View file

@ -14,10 +14,6 @@
import io.netty.handler.codec.http.websocketx.WebSocketFrame; import io.netty.handler.codec.http.websocketx.WebSocketFrame;
import io.netty.util.CharsetUtil; import io.netty.util.CharsetUtil;
import ru.gravit.utils.helper.LogHelper; import ru.gravit.utils.helper.LogHelper;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class WebSocketClientHandler extends SimpleChannelInboundHandler<Object> { public class WebSocketClientHandler extends SimpleChannelInboundHandler<Object> {
private final WebSocketClientHandshaker handshaker; private final WebSocketClientHandshaker handshaker;

View file

@ -6,6 +6,7 @@
import ru.gravit.launcher.events.request.ProfilesRequestEvent; import ru.gravit.launcher.events.request.ProfilesRequestEvent;
import ru.gravit.launcher.profiles.ClientProfile; import ru.gravit.launcher.profiles.ClientProfile;
import ru.gravit.launcher.request.Request; import ru.gravit.launcher.request.Request;
import ru.gravit.launcher.request.RequestException;
import ru.gravit.launcher.request.auth.AuthRequest; import ru.gravit.launcher.request.auth.AuthRequest;
import ru.gravit.launcher.request.update.ProfilesRequest; import ru.gravit.launcher.request.update.ProfilesRequest;
import ru.gravit.launcher.server.setup.ServerWrapperSetup; import ru.gravit.launcher.server.setup.ServerWrapperSetup;
@ -165,7 +166,8 @@ public void run(String... args) throws Throwable {
Request.service.open(); Request.service.open();
LogHelper.debug("Connect to %s", config.websocket.address); LogHelper.debug("Connect to %s", config.websocket.address);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LogHelper.error(e);
throw new RequestException(String.format("Connect error: %s", e.getMessage() != null ? e.getMessage() : "null"));
} }
auth(); auth();
}; };