mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2024-11-24 04:49:47 +00:00
Fixed null pointer exception in hybrid mode.
This commit is contained in:
parent
1500d2e885
commit
1275592747
@ -5,6 +5,7 @@ import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URLDecoder;
|
||||
@ -44,18 +45,18 @@ import com.sun.net.httpserver.HttpServer;
|
||||
public final class DispatchServer {
|
||||
private final InetSocketAddress address;
|
||||
private final Gson gson;
|
||||
private final String defaultServerName = "os_usa";
|
||||
//private QueryCurrRegionHttpRsp currRegion;
|
||||
|
||||
public String regionListBase64;
|
||||
public HashMap<String, RegionData> regions;
|
||||
public HashMap<InetSocketAddress, String> usersIngame;
|
||||
public HashMap<String, UserConnnectionData> usersConnected;
|
||||
|
||||
public static String query_region_list = "";
|
||||
public static String query_cur_region = "";
|
||||
|
||||
public DispatchServer() {
|
||||
this.regions = new HashMap<String, RegionData>();
|
||||
this.usersIngame = new HashMap<InetSocketAddress, String>();
|
||||
this.address = new InetSocketAddress(Grasscutter.getConfig().getDispatchOptions().Ip, Grasscutter.getConfig().getDispatchOptions().Port);
|
||||
this.gson = new GsonBuilder().create();
|
||||
|
||||
@ -71,12 +72,13 @@ public final class DispatchServer {
|
||||
return gson;
|
||||
}
|
||||
|
||||
public QueryCurrRegionHttpRsp getCurrRegion(InetSocketAddress address) {
|
||||
if(usersIngame.containsKey(address)) {
|
||||
return regions.get(usersIngame.get(address)).parsedRegionQuery;
|
||||
public QueryCurrRegionHttpRsp getCurrRegion() {
|
||||
// Needs to be fixed by having the game servers connect to the dispatch server.
|
||||
if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("HYBRID")) {
|
||||
return regions.get(defaultServerName).parsedRegionQuery;
|
||||
}
|
||||
|
||||
Grasscutter.getLogger().error("User is not logged in to dispatch server. " + address.getAddress() + ":" + address.getPort());
|
||||
Grasscutter.getLogger().error("Ignore the error below");
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -109,7 +111,6 @@ public final class DispatchServer {
|
||||
List<RegionSimpleInfo> servers = new ArrayList<RegionSimpleInfo>();
|
||||
List<String> usedNames = new ArrayList<String>(); // List to check for potential naming conflicts
|
||||
if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("HYBRID")) { // Automatically add the game server if in hybrid mode
|
||||
String defaultServerName = "os_usa";
|
||||
RegionSimpleInfo server = RegionSimpleInfo.newBuilder()
|
||||
.setName("os_usa")
|
||||
.setTitle(Grasscutter.getConfig().getGameServerOptions().Name)
|
||||
@ -222,16 +223,11 @@ public final class DispatchServer {
|
||||
OutputStream os = t.getResponseBody();
|
||||
os.write(response.getBytes());
|
||||
os.close();
|
||||
|
||||
if(usersIngame.containsKey(t.getRemoteAddress())) {
|
||||
usersIngame.remove(t.getRemoteAddress());
|
||||
}
|
||||
});
|
||||
|
||||
for (String regionName : regions.keySet()) {
|
||||
server.createContext("/query_cur_region_" + regionName, t -> {
|
||||
String regionCurrentBase64 = regions.get(regionName).Base64;
|
||||
|
||||
// Log
|
||||
Grasscutter.getLogger().info("Client request: query_cur_region_" + regionName);
|
||||
// Create a response form the request query parameters
|
||||
@ -247,8 +243,6 @@ public final class DispatchServer {
|
||||
OutputStream os = t.getResponseBody();
|
||||
os.write(response.getBytes());
|
||||
os.close();
|
||||
//Save region info to hashmap for user, this for getCurrRegion();
|
||||
usersIngame.put(t.getRemoteAddress(), regionName);
|
||||
});
|
||||
}
|
||||
|
||||
@ -521,4 +515,9 @@ public final class DispatchServer {
|
||||
this.Base64 = b64;
|
||||
}
|
||||
}
|
||||
|
||||
public static class UserConnnectionData {
|
||||
public InetAddress dispatchConnectedAddress;
|
||||
public String connectedRegion;
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ public class PacketPlayerLoginRsp extends GenshinPacket {
|
||||
|
||||
this.setUseDispatchKey(true);
|
||||
|
||||
RegionInfo info = Grasscutter.getDispatchServer().getCurrRegion(session.getAddress()).getRegionInfo();
|
||||
RegionInfo info = Grasscutter.getDispatchServer().getCurrRegion().getRegionInfo();
|
||||
|
||||
PlayerLoginRsp p = PlayerLoginRsp.newBuilder()
|
||||
.setIsUseAbilityHash(true) // true
|
||||
|
Loading…
Reference in New Issue
Block a user