Asterisk.Core.Actions
1.0.0
dotnet add package Asterisk.Core.Actions --version 1.0.0
NuGet\Install-Package Asterisk.Core.Actions -Version 1.0.0
<PackageReference Include="Asterisk.Core.Actions" Version="1.0.0" />
<PackageVersion Include="Asterisk.Core.Actions" Version="1.0.0" />
<PackageReference Include="Asterisk.Core.Actions" />
paket add Asterisk.Core.Actions --version 1.0.0
#r "nuget: Asterisk.Core.Actions, 1.0.0"
#:package Asterisk.Core.Actions@1.0.0
#addin nuget:?package=Asterisk.Core.Actions&version=1.0.0
#tool nuget:?package=Asterisk.Core.Actions&version=1.0.0
Asterisk.Core.Actions
Asterisk.Core.Actions es la capa fundamental de la biblioteca que contiene las clases para todas las Acciones de Interfaz del Administrador de Asterisk (AMI).
Cada clase de acción representa un comando AMI específico (ej., Login, Originate, Ping) y actúa como un contenedor de la lógica para:
- Estructurar los campos de datos (parámetros) para ser enviados al servidor AMI.
- Definir el tipo de respuesta tipada (
TResponse) que se espera recibir del servidor. - Serializar la acción en el formato de texto plano requerido por el protocolo AMI.
Arquitectura y Dependencias
Este paquete es la capa central y depende de los paquetes que definen las estructuras de datos básicas:
| Paquete | Propósito | Uso en Actions |
|---|---|---|
Asterisk.Core.Responses |
Define los objetos de respuesta (LoginResponse, OriginateResponse). |
Es el tipo genérico (TResponse) utilizado en MessageBase<TResponse>. |
Clase Base: MessageBase<TResponse>
Todas las acciones heredan de la clase abstracta MessageBase<TResponse>, la cual proporciona la siguiente funcionalidad central:
- Identificación: Genera y mantiene el
ActionIDúnico. - Sincronización: Contiene el
AutoResetEventpara el manejo de llamadas AMI síncronas. - Contrato de Respuesta: Define el método abstracto
OnResponse(Dictionary<string, string> args)que cada acción debe implementar para convertir la respuesta del servidor en su objeto tipado (TResponse). - Eventos: Expone el evento
ResponseReceivedtipado.
Uso Básico
Para definir y enviar una acción, solo necesitas instanciar la clase correspondiente. La acción se encarga de formatear la solicitud.
1. Inicialización de Acciones
La mayoría de las acciones se inicializan directamente.
using Asterisk.Core.Actions;
using Asterisk.Core.Responses;
using System.Threading;
// Ping Action: No requiere parámetros
var pingAction = new PingAction();
// Logoff Action: Cierra la conexión
var logoffAction = new LogoffAction();
2. Acciones con Lógica de Negocio (Login)
La acción Login es un ejemplo donde la clase encapsula la lógica de protocolo (hashing MD5).
using System.Net.Sockets;
using System.Text;
// 1. Obtener el Challenge del servidor
var challengeAction = new ChallengeAction();
// ... (lógica de envío) ...
ChallengeResponse challengeResponse = // ... (obtener respuesta) ...
// 2. Crear la acción de Login usando el Challenge para calcular la Key
var loginAction = new LoginAction("username", "secret");
// 3. Asignar el Challenge (el setter calcula automáticamente el hash MD5)
loginAction.Key = challengeResponse.Challenge;
// 4. La acción está lista para ser enviada
// byte[] amiMessage = loginAction.ToBytes();
3. Implementación de una Acción Personalizada
Si necesitas crear una acción AMI que no existe en el paquete, heredas de la clase base:
using System.Collections.Generic;
public class MyCustomAction : MessageBase<MyCustomResponse>
{
public override string Action { get; } = "MyCustomCommand";
public string CustomField { get; set; } = "Value";
// Implementa la propiedad Fields para indicar los campos a enviar (sin Action/ActionID)
public override IReadOnlyList<KeyValuePair<string, string>> Fields =>
new List<KeyValuePair<string, string>>
{
new ("CustomField", CustomField)
}.AsReadOnly();
// Implementa la deserialización de la respuesta
protected override void OnResponse(Dictionary<string, string> args)
{
// Lógica de parsing aquí
bool success = args.TryGetValue("Response", out var resp) && resp.StartsWith("Success");
_response = new MyCustomResponse(success);
ResponseReceived?.Invoke(this, _response);
// Comprueba si este manejador está asociado con un evento de sincronización (operación síncrona).
if (AutoEvent != null)
// Si hay un AutoResetEvent, llama a 'Set()'. Esto libera al hilo que llamó a 'WaitOne()'
// previamente, permitiéndole continuar su ejecución y recuperar la respuesta.
AutoEvent.Set();
}
}
Contribución
¡Las contribuciones son bienvenidas! Si deseas añadir nuevas clases de respuesta o mejorar la documentación, por favor, abre un issue o envía una pull request a nuestro repositorio.
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
- Asterisk.Core.Responses (>= 1.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Asterisk.Core.Actions:
| 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 | 263 | 11/10/2025 |