Asterisk.Core.Events
1.0.0
dotnet add package Asterisk.Core.Events --version 1.0.0
NuGet\Install-Package Asterisk.Core.Events -Version 1.0.0
<PackageReference Include="Asterisk.Core.Events" Version="1.0.0" />
<PackageVersion Include="Asterisk.Core.Events" Version="1.0.0" />
<PackageReference Include="Asterisk.Core.Events" />
paket add Asterisk.Core.Events --version 1.0.0
#r "nuget: Asterisk.Core.Events, 1.0.0"
#:package Asterisk.Core.Events@1.0.0
#addin nuget:?package=Asterisk.Core.Events&version=1.0.0
#tool nuget:?package=Asterisk.Core.Events&version=1.0.0
Asterisk.Core.Events
El paquete Asterisk.Core.Events proporciona clases de argumentos tipadas y fuertemente estructuradas para representar eventos asíncronos recibidos del Protocolo de Interfaz de Administrador (AMI) de Asterisk.
Este paquete se centra en la limpieza, inmutabilidad y fácil acceso a los datos de los eventos AMI, aprovechando la herencia (DialplanEventArgsBase) y las utilidades de parsing (DialplanParserHelper) que hemos desarrollado.
Características Principales
- Tipificación Fuerte: Todos los eventos AMI se representan mediante clases
EventArgsespecíficas (ej.NewextenEventArgs,HangupEventArgs,VarSetEventArgs). - Herencia y Reutilización: Utiliza la clase base
DialplanEventArgsBasepara gestionar el parsing y las propiedades comunes de todos los eventos relacionados con el flujo de llamadas y el dialplan (Channel,Uniqueid,Context, etc.). - Inmutabilidad: Todas las clases de eventos están diseñadas para ser inmutables, lo que mejora la seguridad en entornos multihilo.
- Separación de Lógica: Utiliza la composición (
DialplanInfo) y helpers estáticos para separar la lógica de parsing compleja (ej. campoChannel, campos prefijados comoDestChannel) de las clases de eventos.
Instalación
Instala el paquete a través del Administrador de Paquetes NuGet:
dotnet add package Asterisk.Core.Events
O desde la Consola del Administrador de Paquetes:
Install-Package Asterisk.Core.Events
Clases de Eventos Modeladas
Las siguientes son algunas de las clases de eventos clave proporcionadas en este paquete:
| Clase de Evento | Clase Base | Descripción |
|---|---|---|
DialplanEventArgsBase |
EventArgs |
Base para todos los eventos del dialplan (Canal, ID, Contexto, Prioridad). |
NewextenEventArgs |
DialplanEventArgsBase |
Se dispara cuando se ejecuta una nueva extensión en el dialplan. |
VarSetEventArgs |
DialplanEventArgsBase |
Indica que una variable del canal ha sido establecida o modificada. |
NewstateEventArgs |
DialplanEventArgsBase |
Un canal existente cambia de estado (ej. de Ringing a Up). |
HangupEventArgs |
DialplanEventArgsBase |
Un canal ha finalizado, incluye la causa (Cause y CauseTxt). |
DialEndEventArgs |
EventArgs (Usa DialplanInfo internamente) |
El proceso de marcación ha finalizado, incluye detalles del destino (DestChannel). |
DeviceStateChangeEventArgs |
EventArgs |
Indica un cambio en el estado de un dispositivo (ej. un hint de dialplan). |
Ejemplo de Uso
Una vez que tengas un listener (escuchador) de eventos AMI configurado, puedes manejar los eventos con seguridad de tipo (type-safety):
// Suponiendo que 'manager' es una instancia de AsteriskManager
manager.EventReceived += (sender, eventArgs) =>
{
var message = e.Message;
Console.WriteLine($"Procesando mensaje de evento: {message.Replace("\r", "\\r").Replace("\n", "\\n")}");
// 1. Análisis: Convierte el mensaje en un diccionario de clave-valor
var lines = message
// Usa TerminatorChars, que es una propiedad de ManagerState.
.Split(TerminatorChars, StringSplitOptions.RemoveEmptyEntries)
.Select(l => l.Split(new[] { ':' }, 2))
.Where(kvp => kvp.Length == 2)
.ToDictionary(kvp => kvp[0].Trim(), kvp => kvp[1].Trim(), StringComparer.OrdinalIgnoreCase);
// 2. Extracción del tipo de evento
if (!lines.TryGetValue("Event", out var eventType))
{
Console.WriteLine("Advertencia: Mensaje sin campo 'Event'. Disparando evento genérico.");
return;
}
// 3. Despacho/Fábrica: Llama a un método que se encargará de crear y disparar el evento tipado.
};
Ejemplo de Uso (Con Eventos Específicos)
En lugar de suscribirse a un evento genérico que requiere un 'cast' manual, se recomienda suscribirse directamente a los eventos tipados proporcionados por AsteriskManager (siguiendo la estructura del paquete Asterisk.Core.Events).
// Suponiendo que 'manager' es una instancia de AsteriskManager
manager.HangupReceived += OnHangup;
manager.DialEndReceived += OnDialEnd;
manager.VarSetReceived += OnVarSet;
private static void OnHangup(object? sender, HangupEventArgs hangup)
{
Console.WriteLine($"📞 Colgado: {hangup.ChannelInfo.UniqueId}");
Console.WriteLine($"Causa: {hangup.Cause} - {hangup.CauseTxt}");
}
private static void OnDialEnd(object? sender, DialEndEventArgs dialEnd)
{
Console.WriteLine($"🏁 Marcación Finalizada con estado: {dialEnd.DialStatus}");
Console.WriteLine($"Canal Destino: {dialEnd.DestChannelInfo.ChannelDetails.Technology}");
}
private static void OnVarSet(object? sender, VarSetEventArgs varSet)
{
Console.WriteLine($"⚙️ Variable establecida: {varSet.Variable} = {varSet.Value}");
}
Licencia
Distribuido bajo la licencia MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Asterisk.Core.Events:
| Package | Downloads |
|---|---|
|
Asterisk.Core.Manager
Biblioteca que define las clases principales de orquestación, conexión, estado y parsing para la biblioteca Asterisk Manager Interface (AMI). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 260 | 11/10/2025 |