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 } }