netflux
Version:
Peer to peer isomorphic transport API based on WebRTC and WebSocket. Allows to create/join full mesh network
51 lines (50 loc) • 1.98 kB
TypeScript
import { Observable } from 'rxjs';
import { Channel } from '../Channel';
import { IStream } from '../misc/util';
import { InSigMsg, OutSigMsg } from '../Signaling';
import { InWcMsg, OutWcMessage, WebChannel } from '../WebChannel';
export interface IMessageFactory<OutMsg, InMsg extends OutMsg> {
create: (properties?: OutMsg) => InMsg;
encode: (message: OutMsg) => {
finish: () => Uint8Array;
};
decode: (reader: Uint8Array) => InMsg;
}
export interface IWebChannelStream<OutMsg, InMsg> {
id: number;
message: Observable<{
senderId: number;
msg: InMsg;
channel: Channel;
recipientId: number;
}>;
send: (msg: Uint8Array | OutMsg, recipientId: number) => void;
}
export interface ISignalingStream<OutMsg, InMsg> {
id: number;
message: Observable<{
senderId: number;
recipientId: number;
msg: InMsg;
}>;
send: (msg: Uint8Array | OutMsg, recipientId: number, senderId: number) => void;
}
export interface IAllStreams<OutMsg, InMsg> {
message: Observable<{
streamId: number;
senderId: number;
recipientId: number;
msg: InMsg;
}>;
sendOver: (streamId: number, msg: Uint8Array | OutMsg, recipientId: number, senderId: number) => void;
}
export declare abstract class Service<OutMsg, InMsg extends OutMsg> {
private serviceId;
private proto;
constructor(serviceId: number, proto: IMessageFactory<OutMsg, InMsg>);
protected useWebChannelStream(wc: IStream<OutWcMessage, InWcMsg> & WebChannel): IWebChannelStream<OutMsg, InMsg>;
protected useSignalingStream(sig: IStream<OutSigMsg, InSigMsg>): ISignalingStream<OutMsg, InMsg>;
protected useAllStreams(wc: IStream<OutWcMessage, InWcMsg> & WebChannel, sig: IStream<OutSigMsg, InSigMsg>): IAllStreams<OutMsg, InMsg>;
protected encode(msg: OutMsg): Uint8Array;
protected decode(bytes: Uint8Array): InMsg;
}