Add Twilio client wrapper and types
Add voice state manager
This commit is contained in:
53
src/Wrappers/voice.ts
Normal file
53
src/Wrappers/voice.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { Device, Connection } from "twilio-client";
|
||||
import useVoiceState, { VoiceState } from "../Hooks/voice-state";
|
||||
|
||||
export interface Voice
|
||||
{
|
||||
startDevice(token: string): void;
|
||||
answer(): void;
|
||||
hangup(): void;
|
||||
voiceState: VoiceState;
|
||||
}
|
||||
|
||||
export default function useVoice()
|
||||
{
|
||||
const state = useVoiceState();
|
||||
let device: Device;
|
||||
let connection: Connection;
|
||||
|
||||
const startDevice = (token: string) =>
|
||||
{
|
||||
device = new Device(token);
|
||||
|
||||
device.on("ready", () => state.onDeviceStateUpdate("Disconnected"));
|
||||
device.on("offline", () => state.onDeviceStateUpdate("Offline"));
|
||||
device.on("disconnect", () => state.onDeviceStateUpdate("Disconnected"));
|
||||
device.on("cancel", () => state.onDeviceStateUpdate("Disconnected"));
|
||||
|
||||
device.on("incoming", (incomingConnection: Connection) =>
|
||||
{
|
||||
state.onDeviceStateUpdate("Ringing", incomingConnection.parameters.From);
|
||||
|
||||
incomingConnection.on("accept", () => state.onDeviceStateUpdate("Connected"));
|
||||
incomingConnection.on("mute", muted => state.onDeviceStateUpdate(muted ? "Muted" : "Connected"));
|
||||
connection = incomingConnection;
|
||||
});
|
||||
}
|
||||
|
||||
const answer = () =>
|
||||
{
|
||||
connection.accept();
|
||||
}
|
||||
|
||||
const hangup = () =>
|
||||
{
|
||||
device.disconnectAll();
|
||||
}
|
||||
|
||||
return {
|
||||
startDevice,
|
||||
answer,
|
||||
hangup,
|
||||
voiceState: state.voiceState,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user