Files
nirvana-v3/packages/core/sockets/channels.ts

149 lines
4.5 KiB
TypeScript

// ! NOTE: these are legacy and too much thinking in the developers head to understand the flow
enum SocketChannels {
SEND_AUDIO_CLIP = "SEND_AUDIO_CLIP",
SEND_USER_STATUS_UPDATE = "SEND_USER_STATUS_UPDATE",
SEND_STARTED_SPEAKING = "SEND_STARTED_SPEAKING",
SEND_STOPPED_SPEAKING = "SEND_STOPPED_SPEAKING",
JOIN_LIVE_ROOM = "JOIN_LIVE_ROOM",
GET_ALL_ACTIVE_SOCKET_IDS = "GET_ALL_ACTIVE_SOCKET_IDS",
SEND_SIGNAL = "SEND_SIGNAL",
RECEIVE_SIGNAL = "RECEIVE_SIGNAL",
// v3
/**
* when someone connects to a line, whether tuned in or not
*/
CONNECT_TO_LINE = "CONNECT_TO_LINE",
SOMEONE_CONNECTED_TO_LINE = "SOMEONE_CONNECTED_TO_LINE",
TUNE_TO_LINE = "TUNE_TO_LINE",
SOMEONE_TUNED_TO_LINE = "SOMEONE_TUNED_TO_LINE",
SOMEONE_UNTUNED_FROM_LINE = "SOMEONE_UNTUNED_FROM_LINE",
USER_BROADCAST_PUSH_PULL = "USER_BROADCAST_PUSH_PULL",
}
// ! MAKE SURE THAT THE ENUMS BETWEEN REQUEST AND RESPONSE DON'T OVERLAP???
// ?maybe won't matter since it's different for server and client?
export enum ServerRequestChannels {
CONNECT_TO_LINE = "CONNECT_TO_LINE",
DISCONNECT_FROM_LINE = "DISCONNECT_FROM_LINE", // TODO: not implementing now
TUNE_INTO_LINE = "TUNE_INTO_LINE", // pass in if user wants to toggle/persist? or is this just temporary?
UNTUNE_FROM_LINE = "UNTUNE_FROM_LINE",
BROADCAST_TO_LINE = "BROADCAST_TO_LINE",
STOP_BROADCAST_TO_LINE = "STOP_BROADCAST_TO_LINE",
RTC_CALL_REQUEST = "RTC_CALL_PREFIX",
RTC_ANSWER_REQUEST = "RTC_ANSWER_REQUEST_PREFIX",
GOING_INTO_FLOW_STATE = "GOING_INTO_FLOW_STATE",
}
export enum ServerResponseChannels {
SOMEONE_CONNECTED_TO_LINE = "SOMEONE_CONNECTED_TO_LINE",
SOMEONE_DISCONNECTED_FROM_LINE = "SOMEONE_DISCONNECTED_FROM_LINE",
SOMEONE_TUNED_INTO_LINE = "SOMEONE_TUNED_INTO_LINE", // allows all current tuned in folks to create peer objects
SOMEONE_UNTUNED_FROM_LINE = "SOMEONE_UNTUNED_FROM_LINE", // discard peer
SOMEONE_STARTED_BROADCASTING = "SOMEONE_STARTED_BROADCASTING", //show their stream tracks
SOMEONE_STOPPED_BROADCASTING = "SOMEONE_STOPPED_BROADCASTING", // stop showing their stream tracks
// sending to the correct room of tunedin folks AND also making sure it's the right event handler in the right handler for this component
RTC_NEW_USER_JOINED_RESPONSE_PREFIX = "RTC_NEW_USER_JOINED_RESPONSE_PREFIX",
RTC_RECEIVING_ANSWER_RESPONSE_PREFIX = "RTC_RECEIVING_ANSWER_RESPONSE_PREFIX",
SOMEONE_GOING_INTO_FLOW_STATE = "SOMEONE_GOING_INTO_FLOW_STATE",
}
export default SocketChannels;
export class ConnectToLineRequest {
constructor(public lineId: string) {}
}
export class SomeoneConnectedResponse {
constructor(
public lineId: string,
public userId: string,
public allConnectedIntoUserIds: string[]
) {}
}
export class TuneToLineRequest {
constructor(public lineId: string, public keepTunedIn: boolean = false) {}
}
export class SomeoneTunedResponse {
constructor(
public lineId: string,
public userId: string,
public allTunedIntoUserIds: string[],
public toggledIn: boolean = false // tell client if this new user toggled in or just temporary so that they can update the right LineMember assoc
) {}
}
export class UntuneFromLineRequest {
constructor(public lineId: string) {}
}
export class SomeoneUntunedFromLineResponse {
constructor(
public lineId: string,
public userId: string,
public allTunedIntoUserIds: string[]
) {}
}
export class StartBroadcastingRequest {
constructor(public lineId: string) {}
}
export class UserStartedBroadcastingResponse {
constructor(public lineId: string, public userId: string) {}
}
export class StopBroadcastingRequest {
constructor(public lineId: string) {}
}
export class UserStoppedBroadcastingResponse {
constructor(public lineId: string, public userId: string) {}
}
// ?another approach to use switch statements, but it just requires same mess, just less methods with socket but who cares right now
export class SocketEmitter<T> {
constructor(public channel: SocketChannels, data: T) {}
}
export class RtcCallRequest {
constructor(
public lineId: string,
public userIdToCall: string,
public simplePeerSignal: any
) {}
}
export class RtcNewUserResponse {
constructor(public newUserId: string, public simplePeerSignal: any) {}
}
export class RtcAnswerRequest {
constructor(
public lineId: string,
public userIdToCall: string,
public simplePeerSignal: any
) {}
}
export class RtcReceiveAnswerResponse {
constructor(public answererUserId: string, public simplePeerSignal: any) {}
}
export class FlowStateRequest {
constructor() {}
}