GameUtilities service refactored.
This commit is contained in:
parent
e646db41fe
commit
ff362593d8
File diff suppressed because one or more lines are too long
@ -2,15 +2,15 @@ package com.alterdekim.hearthhack.component.processor;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.reflect.AbstractParser;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.Compute32;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
public abstract class Processor {
|
||||
public abstract class Processor implements AbstractParser {
|
||||
|
||||
@Setter
|
||||
private int processorId;
|
||||
@ -31,4 +31,9 @@ public abstract class Processor {
|
||||
if(object_id != null) b.setObjectId(object_id);
|
||||
return b.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return processorId;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,13 +1,31 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
public class CheckAccountLicenses extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
Protocol.CheckAccountLicensesResponse response = Protocol.CheckAccountLicensesResponse.newBuilder()
|
||||
.setSuccess(true)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(330, response.toByteString(), response.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setStatus(0)
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,31 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
public class CheckGameLicenses extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
Protocol.CheckGameLicensesResponse checkGameLicensesResponse = Protocol.CheckGameLicensesResponse.newBuilder()
|
||||
.setSuccess(true)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(331, checkGameLicensesResponse.toByteString(), checkGameLicensesResponse.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -8,7 +8,7 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
public abstract class ClientRequestParser {
|
||||
|
||||
public abstract void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn);
|
||||
public abstract void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception;
|
||||
|
||||
public abstract int getId();
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,13 +1,31 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification;
|
||||
|
||||
public class GetAdventureProgress extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
/* Protocol.AdventureProgressResponse progressResponse = Protocol.AdventureProgressResponse.newBuilder()
|
||||
.build();*/
|
||||
|
||||
// Protocol.Notification n = generateNotification(306, progressResponse.toByteString(), progressResponse.getSerializedSize());
|
||||
Protocol.Notification n = generateEmptyNotification(306);
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,31 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
public class GetAssetsVersion extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
Protocol.AssetsVersionResponse assetsVersionResponse = Protocol.AssetsVersionResponse.newBuilder()
|
||||
.setVersion(11046)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(304, assetsVersionResponse.toByteString(), assetsVersionResponse.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setStatus(0)
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,38 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.component.processor.Processor;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
import com.alterdekim.hearthhack.util.Util;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
public class GetBattlePayStatus extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
byte[] b = Util.hexStringToByteArray("0A090A02696412031889020A0F0A0570726F746F1206320408002001");
|
||||
Protocol.Header header = Processor.generateResponse(b.length, packet.getHeader().getToken(), 0, 0);
|
||||
conn.send(new BattleNetPacket(header, b));
|
||||
|
||||
Protocol.BattlePayStatusResponse response = Protocol.BattlePayStatusResponse.newBuilder()
|
||||
.setStatus(Protocol.BattlePayStatusResponse.PurchaseState.PS_READY)
|
||||
.setBattlePayAvailable(true)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(265, response.toByteString(), response.getSerializedSize());
|
||||
|
||||
header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,26 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.component.processor.client.request.generic.GeneralGenericParser;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
public class NetCacheObject extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
|
||||
private final GeneralGenericParser parser;
|
||||
|
||||
public NetCacheObject() {
|
||||
this.parser = new GeneralGenericParser();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
this.parser.parseGenericRequest(
|
||||
packet.getHeader().getToken(),
|
||||
Protocol.UtilGenericRequest.parseFrom(body.getBody()),
|
||||
conn
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,23 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.component.processor.client.request.generic.GeneralGenericParser;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
public class NetCacheObjectList extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
|
||||
private final GeneralGenericParser parser;
|
||||
|
||||
public NetCacheObjectList() {
|
||||
this.parser = new GeneralGenericParser();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
Protocol.GenericRequestList genericRequestList = Protocol.GenericRequestList.parseFrom(body.getBody());
|
||||
genericRequestList.getRequestsList().forEach(gr -> parser.parseGenericRequest(packet.getHeader().getToken(), gr, conn));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3,11 +3,13 @@ package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class SendUnsubcribeRequest extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
|
||||
log.info("parseSendUnsubcribeRequest: got");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,17 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class SetOptions extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
Protocol.SetOptions setOptions = Protocol.SetOptions.parseFrom(body.getBody());
|
||||
log.info("parseSetOptions: got");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,38 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.component.processor.Processor;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
public class SubscriptionRequest extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
//body.getRoute()
|
||||
Protocol.UtilSubscribeResponse response = Protocol.UtilSubscribeResponse.newBuilder()
|
||||
.setRoute((int) (Math.random() * 100d))
|
||||
.setKeepAliveSecs(300)
|
||||
.setMaxResubscribeAttempts(0)
|
||||
.setPendingResponseTimeout(0)
|
||||
.setPendingSubscribeTimeout(15)
|
||||
.setRequestMaxWaitSecs(120)
|
||||
.build();
|
||||
Protocol.ClientResponse clResponse = Protocol.ClientResponse.newBuilder()
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("id")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setIntValue(315)
|
||||
))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("proto")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setBlobValue(response.toByteString())
|
||||
))
|
||||
.build();
|
||||
|
||||
Protocol.Header header = Processor.generateResponse(clResponse.getSerializedSize(), packet.getHeader().getToken(), 0, 0);
|
||||
conn.send(new BattleNetPacket(header, clResponse.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,13 +1,31 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.ClientRequestBody;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
public class UpdateLogin extends ClientRequestParser {
|
||||
@Override
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) {
|
||||
public void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception {
|
||||
//Protocol.UpdateLogin updateLogin = Protocol.UpdateLogin.parseFrom(body.getBody());
|
||||
|
||||
Protocol.UpdateLoginComplete updateLoginComplete = Protocol.UpdateLoginComplete.newBuilder().build();
|
||||
|
||||
Protocol.Notification n = generateNotification(307, updateLoginComplete.toByteString(), updateLoginComplete.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,34 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ACCOUNT_LICENSES;
|
||||
|
||||
public class AccountLicensesInfo extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
// Protocol.AccountLicensesInfoResponse
|
||||
|
||||
Protocol.Notification n = generateEmptyNotification(325);
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return ACCOUNT_LICENSES;
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FEATURES;
|
||||
import static com.alterdekim.hearthhack.util.Util.setInterval;
|
||||
|
||||
@Slf4j
|
||||
public class AvailableFeatures extends GenericParser {
|
||||
|
||||
private void executeFeatures(TcpConnection conn) {
|
||||
Protocol.GuardianVars guardianVars = Protocol.GuardianVars.newBuilder()
|
||||
.setShowUserUi(1)
|
||||
.setClientOptionsUpdateIntervalSeconds(300)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(264, guardianVars.toByteString(), guardianVars.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setStatus(0)
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.build();
|
||||
|
||||
try {
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
setInterval(() -> executeFeatures(conn), 4000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return FEATURES;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.BOOSTERS;
|
||||
|
||||
public class Boosters extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
//Protocol.BoosterList boosterList = Protocol.BoosterList.newBuilder().build();
|
||||
|
||||
Protocol.Notification n = generateEmptyNotification(224);
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return BOOSTERS;
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CARD_BACKS;
|
||||
|
||||
public class CardBacks extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.CardBacks cardBacks = Protocol.CardBacks.newBuilder()
|
||||
.setDefaultCardBack(0)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(236, cardBacks.toByteString(), cardBacks.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return CARD_BACKS;
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,56 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CLIENT_OPTIONS;
|
||||
|
||||
public class ClientOptions extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.ClientOptions clientOptions = Protocol.ClientOptions.newBuilder()
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(24)
|
||||
.setAsInt32(3))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(1)
|
||||
.setAsUint64(13514148956663808L))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(2)
|
||||
.setAsUint64(549755813888L))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(20)
|
||||
.setAsInt32(2))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(21)
|
||||
.setAsInt32(1))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(8)
|
||||
.setAsInt32(4))
|
||||
.addOptions(Protocol.ClientOption.newBuilder()
|
||||
.setIndex(10)
|
||||
.setAsInt32(1))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(241, clientOptions.toByteString(), clientOptions.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return CLIENT_OPTIONS;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.COLLECTION;
|
||||
|
||||
public class Collection extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
// Protocol.Collection collection = Protocol.Collection.newBuilder().build();
|
||||
|
||||
Protocol.Notification n = generateEmptyNotification(207);
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return COLLECTION;
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.DECK_LIST;
|
||||
|
||||
public class DeckList extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.DeckList deckList = Protocol.DeckList.newBuilder()
|
||||
.addDecks(Protocol.DeckInfo.newBuilder()
|
||||
.setId(794851023L)
|
||||
.setName("The Fuck")
|
||||
.setCardBack(0)
|
||||
.setHero(637)
|
||||
.setDeckType(Protocol.DeckType.NORMAL_DECK)
|
||||
.setValidity(767L)
|
||||
.setHeroPremium(0)
|
||||
.setCardBackOverride(false)
|
||||
.setHeroOverride(false)
|
||||
.setLastModified(1461490210L)
|
||||
.setSortOrder(1461490210L)
|
||||
.setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK))
|
||||
.addDecks(Protocol.DeckInfo.newBuilder()
|
||||
.setId(794938262L)
|
||||
.setName("The Cock")
|
||||
.setCardBack(0)
|
||||
.setHero(31)
|
||||
.setDeckType(Protocol.DeckType.NORMAL_DECK)
|
||||
.setValidity(767L)
|
||||
.setHeroPremium(0)
|
||||
.setCardBackOverride(false)
|
||||
.setHeroOverride(false)
|
||||
.setLastModified(1461490581L)
|
||||
.setSortOrder(1461490581L)
|
||||
.setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_BASIC_DECK))
|
||||
.addDecks(Protocol.DeckInfo.newBuilder()
|
||||
.setId(172325L)
|
||||
.setName("precon")
|
||||
.setCardBack(0)
|
||||
.setHero(31)
|
||||
.setDeckType(Protocol.DeckType.PRECON_DECK)
|
||||
.setValidity(31L)
|
||||
.setHeroPremium(0)
|
||||
.setCardBackOverride(false)
|
||||
.setHeroOverride(false)
|
||||
.setSortOrder(0L)
|
||||
.setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN))
|
||||
.addDecks(Protocol.DeckInfo.newBuilder()
|
||||
.setId(171593L)
|
||||
.setName("precon")
|
||||
.setCardBack(0)
|
||||
.setHero(637)
|
||||
.setDeckType(Protocol.DeckType.PRECON_DECK)
|
||||
.setValidity(31L)
|
||||
.setHeroPremium(0)
|
||||
.setCardBackOverride(false)
|
||||
.setHeroOverride(false)
|
||||
.setSortOrder(0L)
|
||||
.setSourceType(Protocol.DeckSourceType.DECK_SOURCE_TYPE_UNKNOWN))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(202, deckList.toByteString(), deckList.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return DECK_LIST;
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.ARCANE_DUST_BALANCE;
|
||||
|
||||
public class DustBalance extends GenericParser {
|
||||
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.ArcaneDustBalance dustBalance = Protocol.ArcaneDustBalance.newBuilder()
|
||||
.setBalance(665)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(262, dustBalance.toByteString(), dustBalance.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return ARCANE_DUST_BALANCE;
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.FAVORITE_HEROES;
|
||||
|
||||
public class FavoriteHeroes extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.FavoriteHeroesResponse favoriteHeroesResponse = Protocol.FavoriteHeroesResponse.newBuilder()
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(2)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(274)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(3)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(31)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(4)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(637)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(5)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(671)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(6)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(813)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(7)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(930)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(8)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(1066)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(9)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(893)
|
||||
.setPremium(0)))
|
||||
.addFavoriteHeroes(Protocol.FavoriteHero.newBuilder()
|
||||
.setClassId(10)
|
||||
.setHero(Protocol.CardDef.newBuilder()
|
||||
.setAsset(7)
|
||||
.setPremium(0)))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(318, favoriteHeroesResponse.toByteString(), favoriteHeroesResponse.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return FAVORITE_HEROES;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Slf4j
|
||||
public class GeneralGenericParser {
|
||||
|
||||
private Map<GetAccountInfoRequest, GenericParser> parsers;
|
||||
|
||||
public GeneralGenericParser() {
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
this.parsers = new HashMap<>();
|
||||
Set<Class<? extends GenericParser>> classes = new Reflections(this.getClass().getPackageName()).getSubTypesOf(GenericParser.class);
|
||||
classes.forEach(c -> {
|
||||
try {
|
||||
var ci = c.getDeclaredConstructor().newInstance();
|
||||
this.parsers.put(ci.getId(), ci);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void parseGenericRequest(int token, Protocol.UtilGenericRequest request, TcpConnection conn) {
|
||||
GetAccountInfoRequest req = GetAccountInfoRequest.parseFromInt(request.getRequestSubId());
|
||||
if( !this.parsers.containsKey(req) ) {
|
||||
log.warn("Unknown generic request: {}", req);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
this.parsers.get(req).parseGenericRequest(token, conn);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.reflect.AbstractParser;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
import com.alterdekim.hearthhack.util.Util;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
public abstract class GenericParser implements AbstractParser {
|
||||
public abstract void parseGenericRequest(int token, TcpConnection conn) throws Exception;
|
||||
|
||||
@Override
|
||||
public abstract int getId();
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.GOLD_BALANCE;
|
||||
|
||||
public class GoldBalance extends GenericParser{
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.GoldBalance gb = Protocol.GoldBalance.newBuilder()
|
||||
.setCap(999999)
|
||||
.setBonusBalance(165)
|
||||
.setCappedBalance(160)
|
||||
.setCapWarning(2000)
|
||||
.build();
|
||||
|
||||
byte[] b = generateNotification(278, gb.toByteString(), gb.getSerializedSize()).toByteArray();
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(b.length)
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, b));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return GOLD_BALANCE;
|
||||
}
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.HERO_XP;
|
||||
|
||||
public class HeroXP extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
|
||||
Protocol.HeroXP xp = Protocol.HeroXP.newBuilder()
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(2)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(823)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(3)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(437)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(4)
|
||||
.setLevel(2)
|
||||
.setCurrXp(12)
|
||||
.setMaxXp(80)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(4)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(1084)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(5)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(847)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(6)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(1361)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(7)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(421)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(8)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(1171)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(9)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(982)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.addXpInfos(Protocol.HeroXPInfo.newBuilder()
|
||||
.setClassId(10)
|
||||
.setLevel(1)
|
||||
.setCurrXp(0)
|
||||
.setMaxXp(70)
|
||||
.setNextReward(Protocol.NextHeroLevelReward.newBuilder()
|
||||
.setLevel(2)
|
||||
.setRewardCard(Protocol.ProfileNoticeRewardCard.newBuilder()
|
||||
.setCard(Protocol.CardDef.newBuilder()
|
||||
.setAsset(940)
|
||||
.setPremium(0))
|
||||
.setQuantity(2))
|
||||
))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(283, xp.toByteString(), xp.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return HERO_XP;
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.MEDAL_INFO;
|
||||
|
||||
public class MedalInfo extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.MedalInfo medalInfo = Protocol.MedalInfo.newBuilder()
|
||||
.setWild(Protocol.MedalInfoData.newBuilder()
|
||||
.setSeasonWins(0)
|
||||
.setStars(0)
|
||||
.setStreak(0)
|
||||
.setStarLevel(1)
|
||||
.setLevelStart(1)
|
||||
.setLevelEnd(3)
|
||||
.setCanLoseLevel(false)
|
||||
.setBestStarLevel(1)
|
||||
.setCanLoseStars(false))
|
||||
.setStandard(Protocol.MedalInfoData.newBuilder()
|
||||
.setSeasonWins(0)
|
||||
.setStars(0)
|
||||
.setStreak(0)
|
||||
.setStarLevel(1)
|
||||
.setLevelStart(1)
|
||||
.setLevelEnd(3)
|
||||
.setCanLoseLevel(false)
|
||||
.setBestStarLevel(1)
|
||||
.setCanLoseStars(false))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(232, medalInfo.toByteString(), medalInfo.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return MEDAL_INFO;
|
||||
}
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOT_SO_MASSIVE_LOGIN;
|
||||
|
||||
public class NotSoMassiveLoginReply extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.NotSoMassiveLoginReply reply = Protocol.NotSoMassiveLoginReply.newBuilder()
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("launch"))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_1")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_2")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_3")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_4")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_5")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("gvg_promote")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("gvg_begin")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("gvg_arena")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_1")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_2")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_3")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_4")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_5")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_pre_sale")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("brm_normal_sale")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("tgt_pre_sale")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("tgt_normal_sale")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("loe_1")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("loe_2")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("loe_3")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("loe_4")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("feast_of_winter_veil")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("set_rotation_2016")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("og_pre_purchase")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("og_normal_sale")
|
||||
.setStart(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("apple_charity_promo_2016")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("naxx_gvg_real_money_sale")
|
||||
.setStart(1)
|
||||
.setEnd(0))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("set_rotation_2016_freepacks")
|
||||
.setStart(0)
|
||||
.setEnd(5059030))
|
||||
.addSpecialEventTiming(Protocol.SpecialEventTiming.newBuilder()
|
||||
.setEvent("set_rotation_2016_questline")
|
||||
.setStart(0)
|
||||
.setEnd(5059028))
|
||||
.setTavernBrawls(Protocol.TavernBrawlInfo.newBuilder()
|
||||
.setNextStartSecondsFromNow(124398L))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(300, reply.toByteString(), reply.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return NOT_SO_MASSIVE_LOGIN;
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.PLAYER_RECORD;
|
||||
|
||||
public class PlayerRecords extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.PlayerRecords playerRecords = Protocol.PlayerRecords.newBuilder()
|
||||
.addRecords(Protocol.PlayerRecord.newBuilder()
|
||||
.setType(Protocol.GameType.GT_VS_AI)
|
||||
.setWins(1)
|
||||
.setLosses(0))
|
||||
.addRecords(Protocol.PlayerRecord.newBuilder()
|
||||
.setType(Protocol.GameType.GT_VS_AI)
|
||||
.setData(637)
|
||||
.setWins(1)
|
||||
.setLosses(0))
|
||||
.addRecords(Protocol.PlayerRecord.newBuilder()
|
||||
.setType(Protocol.GameType.GT_TUTORIAL)
|
||||
.setWins(6)
|
||||
.setLosses(1))
|
||||
.addRecords(Protocol.PlayerRecord.newBuilder()
|
||||
.setType(Protocol.GameType.GT_TUTORIAL)
|
||||
.setData(637)
|
||||
.setWins(1)
|
||||
.setLosses(0))
|
||||
.addRecords(Protocol.PlayerRecord.newBuilder()
|
||||
.setType(Protocol.GameType.GT_TUTORIAL)
|
||||
.setData(1325)
|
||||
.setWins(5)
|
||||
.setLosses(1))
|
||||
.build();
|
||||
|
||||
|
||||
Protocol.Notification n = generateNotification(270, playerRecords.toByteString(), playerRecords.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return PLAYER_RECORD;
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateEmptyNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.NOTICES;
|
||||
|
||||
public class ProfileNotices extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
// Protocol.ProfileNotices
|
||||
Protocol.Notification n = generateEmptyNotification(212);
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return NOTICES;
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.CAMPAIGN_INFO;
|
||||
|
||||
public class ProfileProgress extends GenericParser {
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.ProfileProgress profileProgress = Protocol.ProfileProgress.newBuilder()
|
||||
.setProgress(6)
|
||||
.setBestForge(0)
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(233, profileProgress.toByteString(), profileProgress.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return CAMPAIGN_INFO;
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.alterdekim.hearthhack.component.processor.client.request.generic;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.alterdekim.hearthhack.component.TcpConnection;
|
||||
import com.alterdekim.hearthhack.util.BattleNetPacket;
|
||||
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
|
||||
|
||||
import static com.alterdekim.hearthhack.util.GameUtilities.generateNotification;
|
||||
import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.REWARD_PROGRESS;
|
||||
|
||||
public class RewardProgress extends GenericParser {
|
||||
|
||||
@Override
|
||||
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
|
||||
Protocol.RewardProgress rewardProgress = Protocol.RewardProgress.newBuilder()
|
||||
.setSeasonEnd(Protocol.Date.newBuilder()
|
||||
.setYear(2016)
|
||||
.setMonth(5)
|
||||
.setDay(31)
|
||||
.setHours(22)
|
||||
.setMin(6)
|
||||
.setSec(18))
|
||||
.setWinsPerGold(3)
|
||||
.setGoldPerReward(10)
|
||||
.setMaxGoldPerDay(100)
|
||||
.setSeasonNumber(31)
|
||||
.setXpSoloLimit(60)
|
||||
.setMaxHeroLevel(60)
|
||||
.setEventTimingMod(-0.08333333f)
|
||||
.setNextQuestCancel(Protocol.Date.newBuilder()
|
||||
.setYear(2016)
|
||||
.setMonth(5)
|
||||
.setDay(3)
|
||||
.setHours(0)
|
||||
.setMin(0)
|
||||
.setSec(0))
|
||||
.build();
|
||||
|
||||
Protocol.Notification n = generateNotification(271, rewardProgress.toByteString(), rewardProgress.getSerializedSize());
|
||||
|
||||
Protocol.Header header = Protocol.Header.newBuilder()
|
||||
.setServiceId(4)
|
||||
.setMethodId(1)
|
||||
.setToken(conn.nextToken())
|
||||
.setObjectId(0)
|
||||
.setSize(n.getSerializedSize())
|
||||
.setStatus(0)
|
||||
.build();
|
||||
|
||||
conn.send(new BattleNetPacket(header, n.toByteArray()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetAccountInfoRequest getId() {
|
||||
return REWARD_PROGRESS;
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package com.alterdekim.hearthhack.reflect;
|
||||
|
||||
public interface AbstractParser {
|
||||
int getId();
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.alterdekim.hearthhack.reflect;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@Slf4j
|
||||
public class ReflectionLoader<V extends AbstractParser> {
|
||||
@Getter
|
||||
private Map<Integer, V> parsers;
|
||||
|
||||
public void initReflect(Class<V> vClass) {
|
||||
this.parsers = new HashMap<>();
|
||||
Set<Class<? extends V>> processorClasses = new Reflections(this.getClass().getPackageName()).getSubTypesOf(vClass);
|
||||
processorClasses.forEach(c -> {
|
||||
try {
|
||||
var ci = c.getDeclaredConstructor().newInstance();
|
||||
this.parsers.put(ci.getId(), ci);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.alterdekim.hearthhack.util;
|
||||
|
||||
import com.alterdekim.Protocol;
|
||||
import com.google.protobuf.ByteString;
|
||||
|
||||
public class GameUtilities {
|
||||
public static Protocol.Notification generateNotification(int message_type, ByteString bs, int size) {
|
||||
return Protocol.Notification.newBuilder()
|
||||
.setSenderId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(144115188075855872L)
|
||||
.setLow(0))
|
||||
.setTargetId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(144115198130930503L)
|
||||
.setLow(78330215))
|
||||
.setType("WTCG.UtilNotificationMessage")
|
||||
.setSenderBattleTag("")
|
||||
.setSenderAccountId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(72057594037927936L)
|
||||
.setLow(0))
|
||||
.setTargetAccountId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(72057594037927936L)
|
||||
.setLow(437154195))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("message_type")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setIntValue(message_type)))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("fragment_000")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setBlobValue(bs)))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("message_size")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setIntValue(size)))
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Protocol.Notification generateEmptyNotification(int message_type) {
|
||||
return Protocol.Notification.newBuilder()
|
||||
.setSenderId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(144115188075855872L)
|
||||
.setLow(0))
|
||||
.setTargetId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(144115198130930503L)
|
||||
.setLow(78330215))
|
||||
.setType("WTCG.UtilNotificationMessage")
|
||||
.setSenderBattleTag("")
|
||||
.setSenderAccountId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(72057594037927936L)
|
||||
.setLow(0))
|
||||
.setTargetAccountId(Protocol.EntityId.newBuilder()
|
||||
.setHigh(72057594037927936L)
|
||||
.setLow(437154195))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("message_type")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setIntValue(message_type)))
|
||||
.addAttribute(Protocol.Attribute.newBuilder()
|
||||
.setName("message_size")
|
||||
.setValue(Protocol.Variant.newBuilder()
|
||||
.setIntValue(0)))
|
||||
.build();
|
||||
}
|
||||
}
|
@ -138,11 +138,13 @@ public class Util {
|
||||
return s.length() % 2 == 0 ? s : "0" + s;
|
||||
}
|
||||
|
||||
public static void setTimeout(Runnable runnable, int delay) {
|
||||
public static void setInterval(Runnable runnable, int interval) {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
Thread.sleep(delay);
|
||||
runnable.run();
|
||||
while(true) {
|
||||
Thread.sleep(interval);
|
||||
runnable.run();
|
||||
}
|
||||
} catch (Exception e){
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user