假设app之间可以互相调用

115 阅读1分钟
// 通信架构基础包
lib Communication{
    class Client {
        construct(appKey: string, secret: string);
        private appKey: string;
        private receivers: Receiver[];
        // 启动监听服务
        private startListener();
        // 验证消息来源是否有调起权限 返回权限列表
        private validateMessage(appKey): string[];
        // 收到消息的监听,会执行validateMessage,验证通过后调用receivers的onReceive
        private onReceive(appKey: string; data: buffer);
        // 广播数据
        public broadcast(data: Buffer);
        // 接受数据
        public addReceiver(receiver: Receiver);
    }

    abstract class Receiver {
        construct();
        public onReceive(data: Buffer);
    }
}

// 会议app
class MeetingApp {
    private communication: Client;
    // 录音,在这里调用communication.broadcast,通知其他app
    onRecord(data: buffer) {
        communication.broadcast(data);
    };
}

// 翻译app receiver
class TransReceiver extends Receiver {
    private app: TransApp;
    private communication: Client;
    public onReceive(data: Buffer) {
        const text = app.trans(data);
        communication.broadcast(text);
    };
}
// 翻译app
class TransApp {
    private communication: Client;
    private receiver: TransReceiver;
    construct() {
        this.communication = Client('trans', 'xxx');
        const receiver = new TransReceiver(this, Client);
        this.receiver = receiver;
        communication.addReceiver(receiver);
    };

    // 翻译
    trans(data: buffer): string;
}

// 字幕app receiver
class SubtitleReceiver extends Receiver {
    private app: SubtitleApp;
    private communication: Client;
    public onReceive(data: Buffer) {
        const text = app.playSubtitle(data);
    };
}
// 翻译app
class SubtitleApp {
    private communication: Client;
    private receiver: SubtitleReceiver;
    construct() {
        this.communication = Client('subtitle', 'xxx');
        const receiver = new TransReceiver(this, Client);
        this.receiver = receiver;
        communication.addReceiver(receiver);
    };

    // 播放字幕
    playSubtitle(data: buffer): string;
}