Refactor ProtoFactory

This commit is contained in:
memetrollsXD 2022-07-31 23:30:29 +02:00
parent c537726f27
commit 4ef3575a13
No known key found for this signature in database
GPG Key ID: 105C2F3417AC32CD
2 changed files with 18 additions and 22 deletions

View File

@ -7,11 +7,11 @@ import Interface from "./commands/Interface";
import HttpServer from "./http/HttpServer"; import HttpServer from "./http/HttpServer";
import SRServer from "./server/kcp/SRServer"; import SRServer from "./server/kcp/SRServer";
import Logger from "./util/Logger"; import Logger from "./util/Logger";
import ProtoFactory from "./ProtoFactory" import ProtoFactory from "./util/ProtoFactory"
const c = new Logger("CrepeSR"); const c = new Logger("CrepeSR");
ProtoFactory.init();
c.log(`Starting CrepeSR...`); c.log(`Starting CrepeSR...`);
ProtoFactory.init();
Interface.start(); Interface.start();
HttpServer.getInstance().start(); HttpServer.getInstance().start();
SRServer.getInstance().start(); SRServer.getInstance().start();

View File

@ -1,15 +1,13 @@
//ts-proto generated types required, import them here //ts-proto generated types required, import them here
import * as types from "./data/proto/StarRail"; import * as types from "../data/proto/StarRail";
import protobufjs from "protobufjs"; import protobufjs from "protobufjs";
import {CmdID, PacketName} from "./server/kcp/Packet" import { CmdID, PacketName } from "../server/kcp/Packet"
import Logger from "./util/Logger"; import Logger from "./Logger";
const c = new Logger("ProtoFactory");
class MessageType<T> {
"encode": (arg0: T) => protobufjs.Writer;
var c = new Logger("ProtoFactory"); "fromPartial": (arg0: object) => T;
class MessageType<T>{
"encode": (arg0: T) => protobufjs.Writer;
"fromPartial": (arg0: object) => T;
// "decode": (input: protobufjs.Reader | Uint8Array, length?: number)=> T; // "decode": (input: protobufjs.Reader | Uint8Array, length?: number)=> T;
// "fromJSON": (object: any)=>T; // "fromJSON": (object: any)=>T;
// "toJSON": (message: T)=> unknown // "toJSON": (message: T)=> unknown
@ -20,26 +18,26 @@ class MessageType<T>{
var messageTypeMap = new Map<PacketName, MessageType<any>>(); var messageTypeMap = new Map<PacketName, MessageType<any>>();
var messageTypeMapReversed = new Map<MessageType<any>, PacketName>(); var messageTypeMapReversed = new Map<MessageType<any>, PacketName>();
function send<Class extends MessageType<T>,T>(type: Class, data: T){ function send<Class extends MessageType<T>, T>(type: Class, data: T) {
console.log(type.encode(data).finish()) console.log(type.encode(data).finish())
} }
function isMessageType<T>(pet: MessageType<T> | any): pet is MessageType<T> { function isMessageType<T>(pet: MessageType<T> | any): pet is MessageType<T> {
return (<MessageType<T>>pet).encode !== undefined; return (<MessageType<T>>pet).encode !== undefined;
} }
export default class ProtoFactory{ export default class ProtoFactory {
// ONLY USE THIS IF YOU'RE DECODING SOMETHING DONT USE IT TO SEND SHIT // ONLY USE THIS IF YOU'RE DECODING SOMETHING DONT USE IT TO SEND SHIT
// BECAUSE THEN YOU FUCK YOUR TYPECHECKING // BECAUSE THEN YOU FUCK YOUR TYPECHECKING
static getType(name: PacketName){ static getType(name: PacketName) {
return messageTypeMap.get(name) as MessageType<any>; return messageTypeMap.get(name) as MessageType<any>;
} }
static getName(type: MessageType<any>){ static getName(type: MessageType<any>) {
return messageTypeMapReversed.get(type) as PacketName; return messageTypeMapReversed.get(type) as PacketName;
} }
@ -48,23 +46,21 @@ export default class ProtoFactory{
for (const key of Object.keys(types)) { for (const key of Object.keys(types)) {
let value = types[key as keyof typeof types]; let value = types[key as keyof typeof types];
if (isMessageType(value)) { if (isMessageType(value)) {
if(Object.values(CmdID).includes(key)){ if (Object.values(CmdID).includes(key)) {
messageTypeMap.set(key as PacketName, value); messageTypeMap.set(key as PacketName, value);
messageTypeMapReversed.set(value, key as PacketName); messageTypeMapReversed.set(value, key as PacketName);
}else{ } else {
// there are some types that are not packets, but are still MessageType // there are some types that are not packets, but are still MessageType
// you can figure out what you want to do with them here // you can figure out what you want to do with them here
} }
} }
} }
c.debug("Initialized with " + messageTypeMap.size + " types"); c.debug(`Initialized with " ${messageTypeMap.size} types`);
//c.log(this.getName(types.PlayerLoginScRsp)) //c.log(this.getName(types.PlayerLoginScRsp))
return; return;
//if you want a partial type //if you want a partial type
send(types.PlayerLoginScRsp, types.PlayerLoginScRsp.fromPartial({ send(types.PlayerLoginScRsp, types.PlayerLoginScRsp.fromPartial({
basicInfo: { basicInfo: {