TeamsNetphoneLink/TeamsNetphoneLinkWPF/Communication/ClientSdkEvents.cs
2025-03-25 22:43:13 +01:00

122 lines
5.8 KiB
C#

using CLMGRLib;
namespace TeamsNetphoneLink.Netphone
{
public class ClientSdkEventArgs : EventArgs
{
public CLMgrMessage Msg;
public int Param;
public ClientSdkEventArgs(CLMgrMessage msg, int param)
{
Msg = msg;
Param = param;
}
}
public delegate void LineManagerMessageHandler(ClientSdkEventArgs e);
public class ClientSdkEventSink
{
private ClientLineMgrClass ConnectedLineManager;
private IClientLineMgrEventsPub_PubOnLineMgrNotificationEventHandler EventHandler;
private LineManagerMessageHandler LineManagerMessageDelegateOfForm;
public ClientSdkEventSink()
{
EventHandler = new IClientLineMgrEventsPub_PubOnLineMgrNotificationEventHandler(clmgr_EventSink);
}
public void Connect(ClientLineMgrClass lineManager, LineManagerMessageHandler lineManagerMessageDelegateOfForm)
{
ConnectedLineManager = lineManager;
LineManagerMessageDelegateOfForm = lineManagerMessageDelegateOfForm;
//add eventhandler for the PubOnlineMgrNotification Events
ConnectedLineManager.PubOnLineMgrNotification += EventHandler;
}
public void Disconnect()
{
//remove eventhandler for the PubOnlineMgrNotification Events
ConnectedLineManager.PubOnLineMgrNotification -= EventHandler;
ConnectedLineManager = null;
LineManagerMessageDelegateOfForm = null;
}
private void clmgr_EventSink(int msg, int param)
{
//this method receives the COM events from the client line manger
if ((LineManagerMessageDelegateOfForm != null))
{
LineManagerMessageDelegateOfForm(new ClientSdkEventArgs((CLMgrMessage)msg, param));
}
}
}
public enum CLMgrMessage
{
CLMgrLineStateChangedMessage = 0, //state of at least one line has changed
CLMgrLineSelectionChangedMessage = 1, //line in focus has changed
CLMgrLineDetailsChangedMessage = 2, //details of at least one line have changed
CLMgrCallDetailsMessage = 4, //details of last call are available, post mortem for logging purpose
CLMgrServerDownMessage = 5, //server goes down, keep line manager, wait for ServerUp message
CLMgrServerUpMessage = 6, //server is up again, keep interfaces to line manger
CLMgrWaveDeviceChanged = 7, //speaker / micro has been switched on / off
CLMgrGroupCallNotificationMessage = 8, //notification about group call
CLMgrNumberOfLinesChangedMessage = 10, //the number of lines has changed
CLMgrClientShutDownRequest = 11, //Client Line Manager requests client to shutdown and release all interfaces
CLMgrLineStateChangedMessageEx = 28, //state of certain line has changed, lParam: LOWORD: line index of line that changed its state (starting with 0) HIWORD: new state of this line
CLMgrSIPRegistrationStateChanged = 30, //registration state of SIP account has changed
//lParam: LOBYTE: Account index
// HIBYTE: new state
CLMgrWaveFilePlayed = 31, //wave file playback finished
//lParam: line index;
//if -1, the message is related to a LineMgr function PlaySoundFile or PlayToRtp
//if >=0 the message is related to a line function PlaySoundFile of line with this index
PubCLMgrFirstDataReceived = 32 //first RTP data received on line, might be silence
//lParam: line index;
}
public enum LineState
{
Inactive = 0, //line is inactive
HookOffInternal = 1, //off hook, internal dialtone
HookOffExternal = 2, //off hook, external dialtone
Ringing = 3, //incoming call, ringing
Dialing = 4, //outgoing call, we are dialing, no sound
Alerting = 5, //outgoing call, alerting = ringing on destination
Knocking = 6, //outgoing call, knocking = second call ringing on destination
Busy = 7, //outgoing call, destination is busy
Active = 8, //incoming / outgoing call, logical and physical connection is established
OnHold = 9, //incoming / outgoing call, logical connection is established, destination gets music on hold
ConferenceActive = 10, //incoming / outgoing conference, logical and physical connection is established
ConferenceOnHold = 11, //incoming / outgoing conference, logical connection is established, not physcically connected
Terminated = 12, //incoming / outgoing connection / call has been disconnected
Transferring = 13, //special LSOnHold, call is awaiting to be transferred, peer gets special music on hold
Disabled = 14 //special LSInactive: wrap up time
}
public enum DisconnectReason
{
Normal = 0,
Busy = 1,
Rejected = 2,
Cancelled = 3,
Transferred = 4,
JoinedConference = 5,
NoAnswer = 6,
TooLate = 7,
DirectCallImpossible = 8,
WrongNumber = 9,
Unreachable = 10,
CallDiverted = 11,
CallRoutingFailed = 12,
PermissionDenied = 13,
NetworkCongestion = 14,
NoChannelAvailable = 15,
NumberChanged = 16,
IncompatibleDestination = 17
}
}