in src/common.speech/ServiceRecognizerBase.ts [82:137]
public constructor(
authentication: IAuthentication,
connectionFactory: IConnectionFactory,
audioSource: IAudioSource,
recognizerConfig: RecognizerConfig,
recognizer: Recognizer) {
if (!authentication) {
throw new ArgumentNullError("authentication");
}
if (!connectionFactory) {
throw new ArgumentNullError("connectionFactory");
}
if (!audioSource) {
throw new ArgumentNullError("audioSource");
}
if (!recognizerConfig) {
throw new ArgumentNullError("recognizerConfig");
}
this.privMustReportEndOfStream = false;
this.privAuthentication = authentication;
this.privConnectionFactory = connectionFactory;
this.privAudioSource = audioSource;
this.privRecognizerConfig = recognizerConfig;
this.privIsDisposed = false;
this.privRecognizer = recognizer;
this.privRequestSession = new RequestSession(this.privAudioSource.id());
this.privConnectionEvents = new EventSource<ConnectionEvent>();
this.privServiceEvents = new EventSource<ServiceEvent>();
this.privDynamicGrammar = new DynamicGrammarBuilder();
this.privSpeechContext = new SpeechContext(this.privDynamicGrammar);
this.privAgentConfig = new AgentConfig();
if (typeof (Blob) !== "undefined" && typeof (Worker) !== "undefined") {
this.privSetTimeout = Timeout.setTimeout;
}
this.connectionEvents.attach(async (connectionEvent: ConnectionEvent): Promise<void> => {
if (connectionEvent.name === "ConnectionClosedEvent") {
const connectionClosedEvent = connectionEvent as ConnectionClosedEvent;
if (connectionClosedEvent.statusCode === 1003 ||
connectionClosedEvent.statusCode === 1007 ||
connectionClosedEvent.statusCode === 1002 ||
connectionClosedEvent.statusCode === 4000 ||
this.privRequestSession.numConnectionAttempts > this.privRecognizerConfig.maxRetryCount
) {
await this.cancelRecognitionLocal(CancellationReason.Error,
connectionClosedEvent.statusCode === 1007 ? CancellationErrorCode.BadRequestParameters : CancellationErrorCode.ConnectionFailure,
connectionClosedEvent.reason + " websocket error code: " + connectionClosedEvent.statusCode);
}
}
});
}