Add Twilio client wrapper and types

Add voice state manager
This commit is contained in:
2020-02-06 00:11:48 -05:00
parent adf9e17884
commit 827978d18d
7 changed files with 229 additions and 19 deletions

53
src/Wrappers/voice.ts Normal file
View 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,
}
}