I will post in parts. This first part will demonstrate how to make IWS subscribe to TServer events that you will send from Agent Scripting AIL SDK.
Note I am typing this by hand, there could be some typos!
In your entry point / start up class, define an IViewEventManager and use dependency injection in the constructor to grab a reference:
private IViewEventManager viewEventManager;
public MyClass(IViewEventManager viewEventManager)
{
this.viewEventManager = viewEventManager;
}
In your Initialize method, subscribe to events
public void Initialize()
{
viewEventManager.Subscribe(ViewEventManagerEventHandler);
}
Define your event handler. We want to register for TServer messages AFTER a login is detected (otherwise some references come back as null)
private void ViewEventManagerEventHandler(object eventObject)
{
String eventMessage = eventObject as String;
if(eventMessage.equals("Login"))
{
{
RegisterForTServerMessages();
}
}
}
Lets define RegisterForTServerMessages method. Note you would want to detach any event handlers on the “Logout” event above (not shown):
private void RegisterForTServerMessages()
{
IEnterpriseServiceProvider serviceProvider = agentManager.EntrepriseService.Provider;
IChannelService channelService = serviceProvider.Resolve<IChannelService>("channelService");
IClientChannel[] cChannels = channelService.ListChannels();
if (cChannels != null)
{
for (int i = 0; i < cChannels.Length; i++)
{
if (cChannels[i].Protocol.ProtocolDescription.ProtocolName != null)
{
if (cChannels[i].Protocol.ProtocolDescription.ProtocolName.Equals("TServer"))
{
if (cChannels[i].State != ChannelState.Closed)
{
cChannels[i].RawSubscriber.SubscriptionBroker.Register<IMessage>(HandleUserEvents, new MessageIdFilter(EventUserEvent.MessageId));
break;
}
}
}
}
}
}
Above we attached an event handler method named HandleUserEvents. Lets define it now. This is the method that will process the EventUserEvent messages. Your reactions should happen in here:
private void HAndleUserEvents(IMessage message)
{
EventUserEvent userEvent = message as EventUserEvent;
// userEvent.UserData will contain KVP related info
KeyValueCollection kvc = userEvent.UserData;
if(kvc.ContainsKey("SomeKey"))
{
String myKeyValue = kvc["SomeKey"] as String;
// do something here
}
}
There is lots of error checking and exception handling missing from the above.
Next part will be how to send EventUserEvents to agent DN from agent scripting.