zeroRemote 常网络通信框架 使用接口文件做过游戏协议 支持回调 支持RPC
以下是测试代码
interface T1 {
fuck: { a: number, b: Function }
}
class User extends GameVisitor {
clear(): void {
}
start() {
this.getRouter<T1>("fuck").on("fuck", (data) => {
setTimeout(() => {
data.b()
}, 2000);
})
}
}
let zn = new ZeroRemote(new ws.Server({ port: 8888 }), (carer) => {
return new User(carer)
})
class Client extends ZeroRemoteClient {
url: string = "ws://localhost:8888"
stringify(value: ISCMessage | ICSMessage): string {
return JSON.stringify(value)
}
showMask(): void {
console.log("showMask")
}
hideMask(): void {
console.log("hideMask")
}
error(error: any): void {
console.log(error)
console.log("error")
}
linked(): void {
console.log("linked")
}
popup(): void {
console.log("popup")
}
linking(): void {
console.log("linking")
}
}
setTimeout(() => {
let cc = new Client()
cc.link(() => {
let sender = cc.getSender<T1>("fuck")
sender.fuck({
a: 5, b: () => {
console.log("1")
}
})
sender.fuck({
a: 5, b: () => {
console.log("2")
sender.fuck({
a: 5, b: () => {
console.log("3")
}
})
}
})
})
}, 2000)
//-------------------------------------------------
interface A {
init(a: string, b: number): number
init2(): void
}
interface B {
a(): void
}
/**
* 新建服务
*/
new ZeroRemote(new ws.Server({ port: 2000 }), (carer) => {
return new RPCVisitor(carer)
})
RPCVisitor.addRemote<A>(async (visitor) => {
let a = await visitor.rs.init("a", 4)
console.log("打印远程回调结果")
console.log(a)
}, "tt")
RPCVisitor.addRemote<B>(async (visitor) => {
let xx = async () => {
await visitor.rs.a()
xx()
}
xx()
})
class CS extends RPCClient implements A {
constructor() {
super("ws:127.0.0.1:2000", "tt")
}
init(a: string, b: number): number {
console.log(a)
return 5 + b
}
init2(): void {
console.log("_init2____")
}
}
class CS2 extends RPCClient implements B {
constructor() {
super("ws:127.0.0.1:2000")
}
a(): void {
console.log("aaa")
}
}
let client = new CS()
let client2 = new CS2()
client.link()
client.on("open", () => {
console.log("rpc linked")
})
client2.link()