public EslEventArgs(EslEvent eventReceived) { _eventReceived = eventReceived; }
/// <summary> /// FreeSwitch Events listener hook /// </summary> protected void PopEvent(EslEvent @event) { if (string.IsNullOrEmpty(@event.EventName)) return; switch (@event.EventName.ToUpper()) { case "CHANNEL_HANGUP": DispatchEvents(EslEventType.CHANNEL_HANGUP, new EslEventArgs(new ChannelHangup(@event.Items))); break; case "CHANNEL_HANGUP_COMPLETE": DispatchEvents(EslEventType.CHANNEL_HANGUP_COMPLETE, new EslEventArgs(new ChannelHangup(@event.Items))); break; case "CHANNEL_PROGRESS": DispatchEvents(EslEventType.CHANNEL_PROGRESS, new EslEventArgs(new ChannelProgress(@event.Items))); break; case "CHANNEL_PROGRESS_MEDIA": DispatchEvents(EslEventType.CHANNEL_PROGRESS_MEDIA, new EslEventArgs(new ChannelProgressMedia(@event.Items))); break; case "CHANNEL_EXECUTE": DispatchEvents(EslEventType.CHANNEL_EXECUTE, new EslEventArgs(new ChannelExecute(@event.Items))); break; case "CHANNEL_EXECUTE_COMPLETE": DispatchEvents(EslEventType.CHANNEL_EXECUTE_COMPLETE, new EslEventArgs(new ChannelExecuteComplete(@event.Items))); break; case "CHANNEL_BRIDGE": DispatchEvents(EslEventType.CHANNEL_BRIDGE, new EslEventArgs(new ChannelBridge(@event.Items))); break; case "CHANNEL_UNBRIDGE": DispatchEvents(EslEventType.CHANNEL_UNBRIDGE, new EslEventArgs(new ChannelUnbridge(@event.Items))); break; case "BACKGROUND_JOB": DispatchEvents(EslEventType.BACKGROUND_JOB, new EslEventArgs(new BackgroundJob(@event.Items))); break; case "SESSION_HEARTBEAT": DispatchEvents(EslEventType.SESSION_HEARTBEAT, new EslEventArgs(new SessionHeartbeat(@event.Items))); break; case "CHANNEL_STATE": DispatchEvents(EslEventType.CHANNEL_STATE, new EslEventArgs(new ChannelStateEvent(@event.Items))); break; case "DTMF": DispatchEvents(EslEventType.DTMF, new EslEventArgs(new Dtmf(@event.Items))); break; case "RECORD_STOP": DispatchEvents(EslEventType.RECORD_STOP, new EslEventArgs(new RecordStop(@event.Items))); break; case "CALL_UPDATE": DispatchEvents(EslEventType.CALL_UPDATE, new EslEventArgs(new CallUpdate(@event.Items))); break; case "CUSTOM": DispatchEvents(EslEventType.CUSTOM, new EslEventArgs(new Custom(@event.Items))); break; case "CHANNEL_ANSWER": DispatchEvents(EslEventType.CHANNEL_ANSWER, new EslEventArgs(@event)); break; case "CHANNEL_ORIGINATE": DispatchEvents(EslEventType.CHANNEL_ORIGINATE, new EslEventArgs(@event)); break; case "CHANNEL_PARK": DispatchEvents(EslEventType.CHANNEL_PARK, new EslEventArgs(new ChannelPark(@event.Items))); break; case "CHANNEL_UNPARK": DispatchEvents(EslEventType.CHANNEL_UNPARK, new EslEventArgs(@event)); break; default: DispatchEvents(EslEventType.UN_HANDLED_EVENT, new EslEventArgs(@event)); break; } }
/// <summary> /// Fired when a decoded message is received by the channel. /// </summary> /// <param name="channel">Receiving channel</param> /// <param name="message">Decoded message received</param> private async void OnMessageReceived(ITcpChannel channel, object message) { var decodedMessage = message as EslDecodedMessage; // Handle decoded message. if (decodedMessage?.Headers == null || !decodedMessage.Headers.HasKeys()) return; var headers = decodedMessage.Headers; object response = null; var contentType = headers["Content-Type"]; if (string.IsNullOrEmpty(contentType)) return; contentType = contentType.ToLowerInvariant(); switch (contentType) { case "auth/request": if (OnAuthentication != null) await OnAuthentication(this, EventArgs.Empty).ConfigureAwait(false); break; case "command/reply": var reply = new CommandReply(headers, decodedMessage.OriginalMessage); response = reply; break; case "api/response": var apiResponse = new ApiResponse(decodedMessage.BodyText); response = apiResponse; break; case "text/event-plain": var parameters = decodedMessage.BodyLines.AllKeys.ToDictionary(key => key, key => decodedMessage.BodyLines[key]); var @event = new EslEvent(parameters); response = @event; break; case "log/data": var logdata = new LogData(headers, decodedMessage.BodyText); response = logdata; break; case "text/rude-rejection": await _channel.CloseAsync(); var reject = new RudeRejection(decodedMessage.BodyText); response = reject; break; case "text/disconnect-notice": var notice = new DisconnectNotice(decodedMessage.BodyText); response = notice; break; default: // Here we are handling an unknown message var msg = new EslMessage(decodedMessage.Headers, decodedMessage.OriginalMessage); response = msg; break; } await HandleResponse(response).ConfigureAwait(false); }
public SendEventCommand(EslEvent @event) { _event = @event; }