refactoring
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,11 +1,11 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
.mvn
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
.kotlin
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
|
||||
@@ -1,21 +1,23 @@
|
||||
package com.github.netricecake;
|
||||
|
||||
import com.github.netricecake.kakao.KakaoApi;
|
||||
import com.github.netricecake.kakao.TalkClient;
|
||||
import com.github.netricecake.kakao.TalkHandler;
|
||||
import com.github.netricecake.kakao.exception.*;
|
||||
import com.github.netricecake.kakao.structs.ChatRoom;
|
||||
import com.github.netricecake.kakao.structs.Member;
|
||||
import com.github.netricecake.kakao.structs.Message;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
//TIP 코드를 <b>실행</b>하려면 <shortcut actionId="Run"/>을(를) 누르거나
|
||||
// 에디터 여백에 있는 <icon src="AllIcons.Actions.Execute"/> 아이콘을 클릭하세요.
|
||||
import java.util.Map;
|
||||
|
||||
public class Main {
|
||||
|
||||
static String email = "invalid@example.com";
|
||||
static String email = "invalid@example.com"; // 이메일 말고 전화번호도 가능
|
||||
static String password = "example";
|
||||
static String deviceName = "SM-X930"; // 갤럭시 탭 s11 울트라, 지원되는 태블릿 모델명 넣으세요
|
||||
static String deviceUuid = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; // 64자 랜덤 hex-string, 이것도 에시니까 무조건 다른걸로 바꾸세요.
|
||||
static String deviceUuid = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"; // 64자 랜덤 hex-string
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
TalkClient client = new TalkClient(email, password, deviceName, deviceUuid, new TalkHandler() {
|
||||
@@ -60,6 +62,28 @@ public class Main {
|
||||
getTalkClient().sendMessage(room, member.getName() + "님이 나갔습니다.");
|
||||
}
|
||||
});
|
||||
client.connect();
|
||||
|
||||
try {
|
||||
client.connect();
|
||||
} catch (InvalidDeviceNameException e) {
|
||||
System.out.println("서브 디바이스 로그인을 지원하지 않는 디바이스입니다.");
|
||||
} catch (InvalidDeviceUUIDException e) {
|
||||
System.out.println("Device UUID는 64자리 hex string이어야 합니다.");
|
||||
} catch (BadCredentialsException e) {
|
||||
System.out.println("이메일(전화번호)이나 비밀번호가 틀렸습니다.");
|
||||
} catch (BookingFailedException e) {
|
||||
System.out.println("Booking 서버와의 통신을 실패했습니다.");
|
||||
} catch (LoginFailedException e) {
|
||||
System.out.println("카카오톡 서버와 연결을 실패했습니다. 로그인 정보 파일을 삭제 후 다시 시도해보세요.");
|
||||
} catch (UnregisteredDeviceException e) {
|
||||
System.out.println("디바이스 등록이 필요합니다.");
|
||||
Map.Entry<String, Integer> registerInfo = KakaoApi.generatePasscode(email, password, deviceName, deviceUuid);
|
||||
System.out.println("카카오톡 앱에서 " + registerInfo.getValue() + "초 안에 코드를 입력해주세요. 코드 : " + registerInfo.getKey());
|
||||
boolean registerResult = KakaoApi.registerDevice(email, password, deviceUuid);
|
||||
if (!registerResult) {
|
||||
System.out.println("디바이스 등록 실패");
|
||||
}
|
||||
System.out.println("디바이스 등록 성공, 다시 실행하세요.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.github.netricecake.kakao;
|
||||
|
||||
import com.github.netricecake.kakao.exception.BadCredentialsException;
|
||||
import com.github.netricecake.kakao.exception.InvalidDeviceNameException;
|
||||
import com.github.netricecake.kakao.exception.InvalidDeviceUUIDException;
|
||||
import com.github.netricecake.kakao.exception.UnregisteredDeviceException;
|
||||
import com.github.netricecake.loco.packet.inbound.GetConfIn;
|
||||
import com.github.netricecake.loco.packet.outbound.GetConfOut;
|
||||
import com.github.netricecake.loco.util.ByteUtil;
|
||||
@@ -48,9 +52,9 @@ public class KakaoApi {
|
||||
|
||||
private final static Gson gson = new Gson();
|
||||
|
||||
public static LoginData loginRequest(String email, String password, String deviceName, String deviceUuid) throws IOException, InvalidParameterException, IllegalStateException {
|
||||
if (deviceUuid == null || deviceUuid.length() != UUID_LENGTH) throw new InvalidParameterException("invalid deviceUuid");
|
||||
if (!checkAllowedDevice(deviceName)) throw new InvalidParameterException("This device does not support sub device login");
|
||||
public static LoginData loginRequest(String email, String password, String deviceName, String deviceUuid) throws IOException, InvalidDeviceNameException, InvalidDeviceUUIDException, BadCredentialsException, UnregisteredDeviceException {
|
||||
if (deviceUuid == null || deviceUuid.length() != UUID_LENGTH) throw new InvalidDeviceUUIDException();
|
||||
if (!checkAllowedDevice(deviceName)) throw new InvalidDeviceNameException();
|
||||
RequestBody body = new FormBody.Builder().add("password", password)
|
||||
.add("device_name", deviceName)
|
||||
.add("foced", "false")
|
||||
@@ -68,10 +72,9 @@ public class KakaoApi {
|
||||
int status = jsonObject.get("status").getAsInt();
|
||||
|
||||
// 12 비번 틀림 30 이메일 틀림
|
||||
if (status == 12 || status == 30) throw new InvalidParameterException("Email or password is invalid");
|
||||
if (status == -100) throw new IllegalStateException("Register device before login");
|
||||
if (status == 12 || status == 30) throw new BadCredentialsException();
|
||||
if (status == -100) throw new UnregisteredDeviceException();
|
||||
if (status == 0) {
|
||||
|
||||
LoginData data = new LoginData();
|
||||
data.userId = jsonObject.get("userId").getAsLong();
|
||||
data.countryIso = jsonObject.get("countryIso").getAsString();
|
||||
@@ -218,7 +221,7 @@ public class KakaoApi {
|
||||
public String mainDeviceAppVersion;
|
||||
public String recipe;
|
||||
|
||||
public void fromJson(String json) {
|
||||
public LoginData(String json) {
|
||||
JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
|
||||
userId = jsonObject.get("userId").getAsLong();
|
||||
countryIso = jsonObject.get("countryIso").getAsString();
|
||||
@@ -234,6 +237,8 @@ public class KakaoApi {
|
||||
recipe = jsonObject.get("recipe").getAsString();
|
||||
}
|
||||
|
||||
public LoginData() {}
|
||||
|
||||
public String toJson() {
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
jsonObject.addProperty("userId", userId);
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.github.netricecake.loco.packet.outbound.InfoLinkOut;
|
||||
import com.github.netricecake.loco.packet.outbound.MessageOut;
|
||||
import lombok.Getter;
|
||||
|
||||
public class LocoSocketHandlerImpl implements LocoSocektHandler {
|
||||
public class LocoSocketHandlerImpl extends LocoSocektHandler {
|
||||
|
||||
@Getter
|
||||
private TalkClient client;
|
||||
@@ -79,7 +79,8 @@ public class LocoSocketHandlerImpl implements LocoSocektHandler {
|
||||
|
||||
@Override
|
||||
public void onDisconnect() {
|
||||
|
||||
client.connected = false;
|
||||
System.out.println("연결 끊어짐");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.github.netricecake.kakao;
|
||||
|
||||
import com.github.netricecake.kakao.exception.*;
|
||||
import com.github.netricecake.kakao.structs.ChatRoom;
|
||||
import com.github.netricecake.loco.LocoPacket;
|
||||
import com.github.netricecake.loco.LocoSocektHandler;
|
||||
@@ -18,6 +19,7 @@ import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.awt.print.Book;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
@@ -39,7 +41,7 @@ public class TalkClient {
|
||||
private Map<Long, ChatRoom> chatRooms = new HashMap<>();
|
||||
|
||||
@Getter
|
||||
private boolean connected;
|
||||
protected boolean connected;
|
||||
|
||||
private KakaoApi.LoginData loginData;
|
||||
private GetConfIn bookingData;
|
||||
@@ -54,7 +56,7 @@ public class TalkClient {
|
||||
@Getter
|
||||
private LocoSocket socket;
|
||||
|
||||
public TalkClient(String email, String password, String deviceName, String deviceUuid, TalkHandler talkHandler) {
|
||||
public TalkClient(String email, String password, String deviceName, String deviceUuid, TalkHandler talkHandler) throws IOException {
|
||||
this.email = email;
|
||||
this.password = password;
|
||||
this.deviceName = deviceName;
|
||||
@@ -63,77 +65,48 @@ public class TalkClient {
|
||||
this.talkHandler = talkHandler;
|
||||
talkHandler.setTalkClient(this);
|
||||
|
||||
new File(sessionDir).mkdir();
|
||||
loginData = readLoginData();
|
||||
new File(sessionDir).mkdirs();
|
||||
File loginDataFile = new File(sessionDir + "loginData.json");
|
||||
if (!loginDataFile.exists()) return;
|
||||
String loginDataJson = Files.readString(Paths.get(loginDataFile.getAbsolutePath()));
|
||||
loginData = new KakaoApi.LoginData(loginDataJson);
|
||||
}
|
||||
|
||||
public void connect() throws Exception {
|
||||
if (this.connected) throw new Exception("이미 연결되어 있습니다.");
|
||||
if (loginData == null) {
|
||||
System.out.println("로그인 데이터가 없습니다. 새로 로그인을 시도합니다.");
|
||||
try {
|
||||
loginData = KakaoApi.loginRequest(email, password, deviceName, deviceUuid);
|
||||
} catch (IllegalStateException e) {
|
||||
Map.Entry<String, Integer> registerInfo = KakaoApi.generatePasscode(email, password, deviceName, deviceUuid);
|
||||
System.out.println("기기 등록이 필요합니다.");
|
||||
System.out.println("카카오톡 앱에서 " + registerInfo.getValue() + "초 안에 코드를 입력해주세요. 코드 : " + registerInfo.getKey());
|
||||
boolean registerResult = KakaoApi.registerDevice(email, password, deviceUuid);
|
||||
if (!registerResult) throw new IllegalStateException("기기등록 실패");
|
||||
System.out.println("기기 등록 성공");
|
||||
loginData = KakaoApi.loginRequest(email, password, deviceName, deviceUuid);
|
||||
}
|
||||
System.out.println("로그인이 완료되었습니다.");
|
||||
writeLoginData();
|
||||
public void connect() throws IOException, InvalidDeviceNameException, InvalidDeviceUUIDException, BadCredentialsException, UnregisteredDeviceException, BookingFailedException, LoginFailedException {
|
||||
if (this.connected) throw new IOException("Already connected.");
|
||||
if (loginData == null) { // 저장된 로그인 데이터가 없는 경우 로그인 시도
|
||||
loginData = KakaoApi.loginRequest(email, password, deviceName, deviceUuid);
|
||||
File loginDataFile = new File(sessionDir + "loginData.json");
|
||||
if (!loginDataFile.exists()) loginDataFile.createNewFile();
|
||||
Files.write(Paths.get(loginDataFile.getAbsolutePath()), loginData.toJson().getBytes());
|
||||
}
|
||||
|
||||
bookingData = KakaoApi.getBookingData(loginData.userId);
|
||||
if (bookingData == null || bookingData.getStatus() != 0) throw new BookingFailedException();
|
||||
|
||||
LocoSocket checkInSocket = new LocoSocket(bookingData.getAddr(), bookingData.getPort(), new LocoSocektHandler() {
|
||||
@Override
|
||||
public void onPacket(LocoPacket packet) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnect() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnect() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}, Executors.newFixedThreadPool(1));
|
||||
CheckInOut checkInRequest = new CheckInOut(loginData.userId);
|
||||
byte[] body = checkInRequest.toBson();
|
||||
byte[] body = new CheckInOut(loginData.userId).toBson();
|
||||
checkInSocket.connect();
|
||||
LocoPacket checkinResponse = checkInSocket.writeAndRead(new LocoPacket(1000, checkInRequest.getMethod(), body));
|
||||
checkInData = new CheckInIn();
|
||||
checkInData.fromBson(checkinResponse.getBody());
|
||||
LocoPacket checkinResponse = checkInSocket.writeAndRead(new LocoPacket(1000, "CHECKIN", body));
|
||||
checkInData = new CheckInIn(checkinResponse.getBody());
|
||||
checkInSocket.close();
|
||||
|
||||
|
||||
|
||||
long lastTokenId = 0;
|
||||
long lbk = 0;
|
||||
byte[] rp = ByteUtil.hexStringToByteArray("0000ffff0000");
|
||||
|
||||
try {
|
||||
File loginListDataFile = new File(sessionDir + "loginListData.json");
|
||||
if (loginListDataFile.exists()) {
|
||||
String loginDataJson = Files.readString(Paths.get(loginListDataFile.getAbsolutePath()));
|
||||
JsonObject loginListData = JsonParser.parseString(loginDataJson).getAsJsonObject();
|
||||
lastTokenId = loginListData.getAsJsonPrimitive("lastTokenId").getAsLong();
|
||||
lbk = loginListData.getAsJsonPrimitive("lbk").getAsLong();
|
||||
rp = ByteUtil.hexStringToByteArray("0100ffff0100"); // 이게 도당체 뭐임
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
File loginListDataFile = new File(sessionDir + "loginListData.json");
|
||||
if (loginListDataFile.exists()) {
|
||||
String loginDataJson = Files.readString(Paths.get(loginListDataFile.getAbsolutePath()));
|
||||
JsonObject loginListData = JsonParser.parseString(loginDataJson).getAsJsonObject();
|
||||
lastTokenId = loginListData.getAsJsonPrimitive("lastTokenId").getAsLong();
|
||||
lbk = loginListData.getAsJsonPrimitive("lbk").getAsLong();
|
||||
rp = ByteUtil.hexStringToByteArray("0100ffff0100"); // 이게 도대체 뭐임
|
||||
}
|
||||
|
||||
locoHandlerPool = Executors.newFixedThreadPool(1);
|
||||
@@ -149,21 +122,16 @@ public class TalkClient {
|
||||
loginListData = new LoginListIn();
|
||||
loginListData.fromBson(socket.writeAndRead(new LocoPacket("LOGINLIST", req.toBson())).getBody());
|
||||
if (loginListData.getStatus() != 0) {
|
||||
System.out.println("카카오톡 서버와 연결을 실패했습니다. 로그인 정보 파일을 삭제 후 다시 시도해보세요.");
|
||||
throw new Exception("카카오톡 서버와 연결을 실패했습니다. 로그인 정보 파일을 삭제 후 다시 시도해보세요.");
|
||||
throw new LoginFailedException();
|
||||
}
|
||||
System.out.println("연결 성공");
|
||||
|
||||
try {
|
||||
File loginListDataFile = new File(sessionDir + "loginListData.json");
|
||||
if (!loginListDataFile.exists()) loginListDataFile.createNewFile();
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
jsonObject.addProperty("lastTokenId", loginListData.getLastTokenId());
|
||||
jsonObject.addProperty("lbk", loginListData.getLbk());
|
||||
Files.write(Paths.get(loginListDataFile.getAbsolutePath()), new Gson().toJson(jsonObject).getBytes());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (!loginListDataFile.exists()) loginListDataFile.createNewFile();
|
||||
JsonObject jsonObject = new JsonObject();
|
||||
jsonObject.addProperty("lastTokenId", loginListData.getLastTokenId());
|
||||
jsonObject.addProperty("lbk", loginListData.getLbk());
|
||||
Files.write(Paths.get(loginListDataFile.getAbsolutePath()), new Gson().toJson(jsonObject).getBytes());
|
||||
|
||||
connected = true;
|
||||
|
||||
new Thread(() -> {
|
||||
try {
|
||||
@@ -179,31 +147,6 @@ public class TalkClient {
|
||||
});
|
||||
}
|
||||
|
||||
private KakaoApi.LoginData readLoginData() {
|
||||
try {
|
||||
File loginDataFile = new File(sessionDir + "loginData.json");
|
||||
if (!loginDataFile.exists()) return null;
|
||||
String loginDataJson = Files.readString(Paths.get(loginDataFile.getAbsolutePath()));
|
||||
KakaoApi.LoginData loginData = new KakaoApi.LoginData();
|
||||
loginData.fromJson(loginDataJson);
|
||||
return loginData;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void writeLoginData() {
|
||||
try {
|
||||
File loginDataFile = new File(sessionDir + "loginData.json");
|
||||
if (!loginDataFile.exists()) loginDataFile.createNewFile();
|
||||
Files.write(Paths.get(loginDataFile.getAbsolutePath()), loginData.toJson().getBytes());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean sendMessage(ChatRoom room, int type, String message, String extra) {
|
||||
WriteOut wo = new WriteOut();
|
||||
wo.setChatId(room.getChatId());
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class BadCredentialsException extends Exception {
|
||||
/*
|
||||
email, password mismatch
|
||||
*/
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class BookingFailedException extends Exception {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class InvalidDeviceNameException extends Exception {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class InvalidDeviceUUIDException extends Exception {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class LoginFailedException extends Exception {}
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.netricecake.kakao.exception;
|
||||
|
||||
public class UnregisteredDeviceException extends Exception {}
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.github.netricecake.loco;
|
||||
|
||||
public interface LocoSocektHandler {
|
||||
public class LocoSocektHandler {
|
||||
|
||||
void onPacket(LocoPacket packet);
|
||||
public void onPacket(LocoPacket packet) {}
|
||||
|
||||
void onConnect();
|
||||
public void onConnect() {}
|
||||
|
||||
void onDisconnect();
|
||||
public void onDisconnect() {}
|
||||
|
||||
void onError(Exception e);
|
||||
public void onError(Exception e) {}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.github.netricecake.loco.packet;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class InboundPacket {
|
||||
|
||||
public String getStringOrNull(JsonObject jsonObject, String key) {
|
||||
JsonElement jsonElement = jsonObject.get(key);
|
||||
return jsonElement == null ? null : jsonElement.getAsString();
|
||||
}
|
||||
|
||||
public int getIntOrNull(JsonObject jsonObject, String key) {
|
||||
JsonElement jsonElement = jsonObject.get(key);
|
||||
return jsonElement == null ? 0 : jsonElement.getAsInt();
|
||||
}
|
||||
|
||||
public boolean getBoolOrNull(JsonObject jsonObject, String key) {
|
||||
JsonElement jsonElement = jsonObject.get(key);
|
||||
return jsonElement == null || jsonElement.getAsBoolean();
|
||||
}
|
||||
|
||||
public long getLongOrNull(JsonObject jsonObject, String key) {
|
||||
JsonElement jsonElement = jsonObject.get(key);
|
||||
return jsonElement == null ? 0L : jsonElement.getAsLong();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class ChatInfoIn {
|
||||
public class ChatInfoIn extends InboundPacket {
|
||||
|
||||
private String type;
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
public class CheckInIn {
|
||||
public class CheckInIn extends InboundPacket {
|
||||
|
||||
private int status;
|
||||
|
||||
@@ -32,21 +33,20 @@ public class CheckInIn {
|
||||
|
||||
private String MCCMNC;
|
||||
|
||||
public void fromBson(byte[] bson)
|
||||
{
|
||||
public CheckInIn(byte[] bson) {
|
||||
JsonObject json = BsonUtil.bsonToJsonObject(bson);
|
||||
status = json.get("status").getAsInt();
|
||||
host = json.get("host").getAsString();
|
||||
host6 = json.get("host6").getAsString();
|
||||
port = json.get("port").getAsInt();
|
||||
cshost = json.get("cshost").getAsString();
|
||||
cshost6 = json.get("cshost6").getAsString();
|
||||
csport = json.get("csport").getAsInt();
|
||||
vsshost = json.get("vsshost").getAsString();
|
||||
vsshost6 = json.get("vsshost6").getAsString();
|
||||
vssport = json.get("vssport").getAsInt();
|
||||
cacheExpire = json.get("cacheExpire").getAsLong();
|
||||
MCCMNC = json.get("MCCMNC").getAsString();
|
||||
status = getIntOrNull(json, "status");
|
||||
host = getStringOrNull(json, "host");
|
||||
host6 = getStringOrNull(json, "host6");
|
||||
port = getIntOrNull(json, "port");
|
||||
cshost = getStringOrNull(json, "cshost");
|
||||
cshost6 = getStringOrNull(json, "cshost6");
|
||||
csport = getIntOrNull(json, "csport");
|
||||
vsshost = getStringOrNull(json, "vsshost");
|
||||
vsshost6 = getStringOrNull(json, "vsshost6");
|
||||
vssport = getIntOrNull(json, "vssport");
|
||||
cacheExpire = getLongOrNull(json, "cacheExpire");
|
||||
MCCMNC = getStringOrNull(json, "MCCMNC");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class DelMemIn {
|
||||
public class DelMemIn extends InboundPacket {
|
||||
|
||||
private long chatId;
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
public class GetConfIn {
|
||||
public class GetConfIn extends InboundPacket {
|
||||
|
||||
private int status;
|
||||
|
||||
@@ -17,8 +18,10 @@ public class GetConfIn {
|
||||
public void fromBson(byte[] bson) {
|
||||
JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson);
|
||||
status = jsonObject.get("status").getAsInt();
|
||||
addr = jsonObject.get("ticket").getAsJsonObject().get("lsl").getAsJsonArray().get(0).getAsString();
|
||||
port = jsonObject.get("wifi").getAsJsonObject().get("ports").getAsJsonArray().get(0).getAsInt();
|
||||
try {
|
||||
addr = jsonObject.get("ticket").getAsJsonObject().get("lsl").getAsJsonArray().get(0).getAsString();
|
||||
port = jsonObject.get("wifi").getAsJsonObject().get("ports").getAsJsonArray().get(0).getAsInt();
|
||||
} catch (Exception e) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class InfoLinkIn {
|
||||
public class InfoLinkIn extends InboundPacket {
|
||||
|
||||
private String name;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
@@ -8,7 +9,7 @@ import lombok.Getter;
|
||||
import java.util.Base64;
|
||||
|
||||
@Getter
|
||||
public class LoginListIn {
|
||||
public class LoginListIn extends InboundPacket {
|
||||
|
||||
private int status;
|
||||
|
||||
@@ -45,21 +46,23 @@ public class LoginListIn {
|
||||
public void fromBson(byte[] bson) {
|
||||
JsonObject json = BsonUtil.bsonToJsonObject(bson);
|
||||
status = json.get("status").getAsInt();
|
||||
userId = json.get("userId").getAsLong();
|
||||
revision = json.get("revision").getAsInt();
|
||||
revisionInfo = json.get("revisionInfo").getAsString();
|
||||
rp = Base64.getDecoder().decode(json.get("rp").getAsJsonObject().get("$binary").getAsJsonObject().get("base64").getAsString());
|
||||
minLogId = json.get("minLogId").getAsLong();
|
||||
sb = json.get("sb").getAsInt();
|
||||
chatDatas = json.get("chatDatas").getAsJsonArray();
|
||||
delChatIds = json.get("delChatIds").getAsJsonArray();
|
||||
kc = json.get("kc").getAsJsonArray();
|
||||
mcmRevision = json.get("mcmRevision").getAsInt();
|
||||
lastTokenId = json.get("lastTokenId").getAsLong();
|
||||
lastChatId = json.get("lastChatId").getAsLong();
|
||||
ltk = json.get("ltk").getAsLong();
|
||||
lbk = json.get("lbk").getAsLong();
|
||||
eof = json.get("eof").getAsBoolean();
|
||||
try {
|
||||
userId = json.get("userId").getAsLong();
|
||||
revision = json.get("revision").getAsInt();
|
||||
revisionInfo = json.get("revisionInfo").getAsString();
|
||||
rp = Base64.getDecoder().decode(json.get("rp").getAsJsonObject().get("$binary").getAsJsonObject().get("base64").getAsString());
|
||||
minLogId = json.get("minLogId").getAsLong();
|
||||
sb = json.get("sb").getAsInt();
|
||||
chatDatas = json.get("chatDatas").getAsJsonArray();
|
||||
delChatIds = json.get("delChatIds").getAsJsonArray();
|
||||
kc = json.get("kc").getAsJsonArray();
|
||||
mcmRevision = json.get("mcmRevision").getAsInt();
|
||||
lastTokenId = json.get("lastTokenId").getAsLong();
|
||||
lastChatId = json.get("lastChatId").getAsLong();
|
||||
ltk = json.get("ltk").getAsLong();
|
||||
lbk = json.get("lbk").getAsLong();
|
||||
eof = json.get("eof").getAsBoolean();
|
||||
} catch(Exception e) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class MessageIn {
|
||||
public class MessageIn extends InboundPacket {
|
||||
|
||||
private long chatId;
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class NewMemIn {
|
||||
public class NewMemIn extends InboundPacket {
|
||||
|
||||
private long chatId;
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
public class PingIn {
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
|
||||
public class PingIn extends InboundPacket {
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package com.github.netricecake.loco.packet.inbound;
|
||||
|
||||
import com.github.netricecake.loco.packet.InboundPacket;
|
||||
import com.github.netricecake.loco.util.BsonUtil;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class WriteIn {
|
||||
public class WriteIn extends InboundPacket {
|
||||
|
||||
private int status;
|
||||
|
||||
|
||||
@@ -26,10 +26,6 @@ public class CheckInOut {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return "CHECKIN";
|
||||
}
|
||||
|
||||
public byte[] toBson() {
|
||||
JsonObject checkInObject = new JsonObject();
|
||||
checkInObject.addProperty("userId", userId);
|
||||
|
||||
Reference in New Issue
Block a user