This commit is contained in:
Tau 2019-03-31 18:47:00 -04:00
parent cff7305731
commit 25bdc7d9dd
6 changed files with 133 additions and 7 deletions

View File

@ -86,6 +86,21 @@ readers.set(MSG.GET_EXIST_RECORD_REQ, buf => {
};
});
readers.set(MSG.GET_RECORD_REQ, buf => {
return {
type: "get_record_req",
aimeId: buf.readUInt32LE(0x0004),
pcbId: buf.slice(0x0008, buf.indexOf("\0", 0x0008)).toString("ascii"),
};
});
readers.set(MSG.GET_STOCKER_REQ, buf => {
return {
type: "get_stocker_req",
aimeId: buf.readUInt32LE(0x0004),
};
});
readers.set(MSG.GET_REWARD_TABLE_REQ, () => {
return {
type: "get_reward_table_req",
@ -110,6 +125,12 @@ readers.set(MSG.UPDATE_RECORD_REQ, buf => {
};
});
readers.set(MSG.UPDATE_STORY_CLEAR_NUM_REQ, () => {
return {
type: "update_story_clear_num_req",
};
});
readers.set(MSG.UPDATE_TOPIC_REQ, buf => {
const aimeId = buf.readUInt32LE(0x0004);

View File

@ -4,7 +4,10 @@ export const MSG = {
GET_CONFIG_RES: 0x0005,
GET_SERVER_LIST_REQ: 0x0006,
GET_SERVER_LIST_RES: 0x0007,
GET_RECORD_V1_RES: 0x0064,
GET_RECORD_V2_RES: 0x0065,
CREATE_RECORD_REQ: 0x0066,
GET_RECORD_REQ: 0x0067,
UPDATE_RECORD_REQ: 0x0068,
ACCOUNT_LOCK_REQ: 0x0069,
ACCOUNT_LOCK_RES: 0x006a,
@ -14,7 +17,8 @@ export const MSG = {
ACCOUNT_UNLOCK_RES: 0x0070,
CREATE_TEAM_REQ: 0x007b,
CREATE_TEAM_RES: 0x007c,
UPDATE_STORY_CLEAR_REQ: 0x007f,
UPDATE_STORY_CLEAR_NUM_REQ: 0x007f,
UPDATE_STORY_CLEAR_NUM_RES: 0x0080,
UPDATE_PROVISIONAL_STORE_RANK_REQ: 0x0082,
UPDATE_PROVISIONAL_STORE_RANK_RES: 0x0083,
GET_REWARD_TABLE_REQ: 0x0086,
@ -23,6 +27,8 @@ export const MSG = {
UPDATE_TOPIC_RES: 0x009b,
GET_CONFIG_DATA_2_REQ: 0x00ab,
GET_CONFIG_DATA_2_RES: 0x00ac,
GET_STOCKER_REQ: 0x00a7,
GET_STOCKER_RES: 0x00a8,
};
export const REQ_LEN = new Map<number, number>();
@ -34,9 +40,11 @@ REQ_LEN.set(MSG.CREATE_TEAM_REQ, 0x0010);
REQ_LEN.set(MSG.GET_CONFIG_REQ, 0x0050);
REQ_LEN.set(MSG.GET_CONFIG_DATA_2_REQ, 0x0010);
REQ_LEN.set(MSG.GET_EXIST_RECORD_REQ, 0x0010);
REQ_LEN.set(MSG.GET_RECORD_REQ, 0x0020);
REQ_LEN.set(MSG.GET_REWARD_TABLE_REQ, 0x0010);
REQ_LEN.set(MSG.GET_SERVER_LIST_REQ, 0x0020);
REQ_LEN.set(MSG.GET_STOCKER_REQ, 0x0010);
REQ_LEN.set(MSG.UPDATE_PROVISIONAL_STORE_RANK_REQ, 0x0010);
REQ_LEN.set(MSG.UPDATE_RECORD_REQ, 0x0940);
REQ_LEN.set(MSG.UPDATE_STORY_CLEAR_REQ, 0x0020);
REQ_LEN.set(MSG.UPDATE_STORY_CLEAR_NUM_REQ, 0x0010);
REQ_LEN.set(MSG.UPDATE_TOPIC_REQ, 0x0010);

View File

@ -53,14 +53,14 @@ export class Encoder extends Transform {
case "get_config_res":
buf = Buffer.alloc(0x01a0);
buf.writeUInt16LE(MSG.GET_CONFIG_RES, 0x0000);
buf.writeUInt16LE(obj.status, 0x0002);
buf.writeUInt8(obj.status, 0x0002);
break;
case "get_config_2_res":
buf = Buffer.alloc(0x230);
buf.writeUInt16LE(MSG.GET_CONFIG_DATA_2_RES, 0x0000);
buf.writeUInt16LE(obj.status, 0x0002);
buf.writeUInt8(obj.status, 0x0002);
break;
@ -71,6 +71,20 @@ export class Encoder extends Transform {
break;
case "get_record_v1_res":
buf = Buffer.alloc(0x0c60);
buf.writeUInt16LE(MSG.GET_RECORD_V1_RES, 0x0000);
//iconv.encode("てすと", sjis).copy(buf, 0x03ea);
break;
case "get_record_v2_res":
buf = Buffer.alloc(0x0d30);
buf.writeUInt16LE(MSG.GET_RECORD_V2_RES, 0x0000);
iconv.encode("てすと", sjis).copy(buf, 0x03ea);
break;
case "get_reward_table_res":
buf = Buffer.alloc(0x01c0);
buf.writeUInt16LE(MSG.GET_REWARD_TABLE_RES, 0x0000);
@ -105,6 +119,13 @@ export class Encoder extends Transform {
break;
case "get_stocker_res":
buf = Buffer.alloc(0x00a0);
buf.writeUInt16LE(MSG.GET_STOCKER_RES, 0x0000);
buf.writeUInt8(obj.status, 0x0002);
break;
case "update_provisional_store_rank_res":
buf = Buffer.alloc(0x02b0);
buf.writeUInt16LE(MSG.UPDATE_PROVISIONAL_STORE_RANK_RES, 0x0000);
@ -123,6 +144,12 @@ export class Encoder extends Transform {
break;
case "update_story_clear_num_res":
buf = Buffer.alloc(0x0220);
buf.writeUInt16LE(MSG.UPDATE_STORY_CLEAR_NUM_RES, 0x0000);
break;
case "update_topic_res":
buf = Buffer.alloc(0x05d0);
buf.writeUInt16LE(MSG.UPDATE_TOPIC_RES, 0x0000);

View File

@ -62,6 +62,21 @@ export default async function idz(socket: Socket) {
break;
case "get_exist_record_req":
output.write({
type: "get_exist_record_res",
result: true,
});
break;
case "get_record_req":
output.write({
type: "get_record_v2_res",
});
break;
case "get_reward_table_req":
output.write({
type: "get_reward_table_res",
@ -114,10 +129,10 @@ export default async function idz(socket: Socket) {
break;
case "get_exist_record_req":
case "get_stocker_req":
output.write({
type: "get_exist_record_res",
result: false,
type: "get_stocker_res",
status: 1,
});
break;
@ -138,12 +153,24 @@ export default async function idz(socket: Socket) {
break;
case "update_story_clear_num_req":
output.write({
type: "update_story_clear_num_res",
});
break;
case "update_topic_req":
output.write({
type: "update_topic_res",
});
break;
default:
const exhaustCheck: never = msg;
throw new Error(`Unhandled message ${msg["type"]}`);
}
}
} catch (e) {

View File

@ -57,6 +57,12 @@ export interface GetExistRecordRequest {
aimeId: number;
}
export interface GetRecordRequest {
type: "get_record_req";
aimeId: number;
pcbId: string;
}
export interface GetRewardTableRequest {
type: "get_reward_table_req";
}
@ -65,6 +71,11 @@ export interface GetServerListRequest {
type: "get_server_list_req";
}
export interface GetStockerRequest {
type: "get_stocker_req";
aimeId: number;
}
export interface UpdateProvisionalStoreRankRequest {
type: "update_provisional_store_rank_req";
aimeId: number;
@ -75,6 +86,10 @@ export interface UpdateRecordRequest {
// TODO
}
export interface UpdateStoryClearNumRequest {
type: "update_story_clear_num_req";
}
export interface UpdateTopicRequest {
type: "update_topic_req";
aimeId?: number;
@ -88,8 +103,11 @@ export type Request =
| GetConfigRequest
| GetConfigRequest2
| GetExistRecordRequest
| GetRecordRequest
| GetRewardTableRequest
| GetServerListRequest
| GetStockerRequest
| UpdateProvisionalStoreRankRequest
| UpdateRecordRequest
| UpdateStoryClearNumRequest
| UpdateTopicRequest;

View File

@ -35,6 +35,16 @@ export interface GetExistRecordResponse {
result: boolean;
}
export interface GetRecordResponse1 {
type: "get_record_v1_res";
// giga TODO
}
export interface GetRecordResponse2 {
type: "get_record_v2_res";
// giga TODO
}
export interface GetRewardTableResponse {
type: "get_reward_table_res";
// TODO
@ -80,6 +90,12 @@ export interface GetServerListResponse {
reportErrorUrl: string;
}
export interface GetStockerResponse {
type: "get_stocker_res";
status: number;
// mega TODO
}
export interface UpdateProvisionalStoreRankResponseRow {
field_0000: number;
field_0004: number;
@ -92,6 +108,11 @@ export interface UpdateProvisionalStoreRankResponse {
rows: UpdateProvisionalStoreRankResponseRow[];
}
export interface UpdateStoryClearNumResponse {
type: "update_story_clear_num_res";
// TODO, looks like a table of 9 * 10 u32 fields
}
export interface UpdateTopicResponse {
type: "update_topic_res";
// mega TODO
@ -105,7 +126,11 @@ export type Response =
| GetConfigResponse
| GetConfigResponse2
| GetExistRecordResponse
| GetRecordResponse1
| GetRecordResponse2
| GetRewardTableResponse
| GetServerListResponse
| GetStockerResponse
| UpdateProvisionalStoreRankResponse
| UpdateStoryClearNumResponse
| UpdateTopicResponse;