package tcg.scada.event;
import java.util.Scanner;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.omg.CORBA.Object;
import tcg.common.CorbaHelper;
import tcg.scada.cos.ICosEventServer;
import tcg.scada.cos.ICosEventServerHelper;
import tcg.syscontrol.GenericAgentTest;
import tcg.syscontrol.cos.DEFAULT_EVENT_PORT;
import tcg.syscontrol.cos.ICosManagedProcess;
import tcg.syscontrol.cos.ICosManagedProcessHelper;
import tcg.syscontrol.cos.STR_EVENT_SERVER;
public class EventClientTest
{
public static Logger logger_ = Logger.getLogger(GenericAgentTest.class
.toString());
private static ICosEventServer eventServer = null;
private static int eventCtx = 0;
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
final String prompt = "Event (\'q\' to quit): ";
BasicConfigurator.configure();
CorbaHelper.getInstance();
String ior = "corbaloc::localhost:" + DEFAULT_EVENT_PORT.value + "/"
+ STR_EVENT_SERVER.value;
logger_.info("IOR: " + ior);
try
{
// Object obj = orb_.string_to_object(ior);
Object obj = CorbaHelper.stringToObject(ior);
eventServer = ICosEventServerHelper.narrow(obj);
}
catch (Exception ex)
{
logger_.error("Can not get reference to process manager: " + ior
+ ". " + "Exception: " + ex.toString());
return;
}
if (eventServer == null)
{
logger_.error("Can not get reference to process manager: " + ior);
return;
}
// register with event server
try
{
eventCtx = eventServer.cosCreateEventContext("SYSTEM",
java.net.InetAddress.getLocalHost().getHostName(),
"TESTCLIENT", 10000);
if (eventCtx == 0)
{
logger_.error("Can not create event context in event server.");
return;
}
}
catch (Exception ex)
{
logger_
.error("Can not create event context in event server. Exception: "
+ ex.toString());
return;
}
// //load dummy list of events
// int[] events = { 1001, 1002, 1003, 1004, 1005 };
// try
// {
// eventServer.cosLoadEvents(eventCtx,events);
// }
// catch (Exception ex)
// {
// logger_.error("Can not load list of events in event server. Exception: "
// + ex.toString());
// return;
// }
// write event
Scanner in = new Scanner(System.in);
String str = "";
int evtId = 0;
do
{
System.out.print(prompt);
str = in.nextLine();
// user press enter
if (str.trim().length() == 0)
{
continue;
}
// user want to quit
if (str.compareToIgnoreCase("q") == 0)
{
break;
}
evtId = 0;
// some form of complex command
if (str.charAt(0) == '>')
{
// expectecd format: >load:xxxx;xxxx;xxxx
// >write xxxx:xxxx;xxxx
String message = str.substring(1);
int pos = message.indexOf(':');
if (pos < 0)
{
System.out.println(prompt
+ "expected format: >load:evt-id;evt-id;evt-id");
System.out
.println(prompt
+ "expected format: >write evnt-id:param1;param2;param3");
continue; // invalid command
}
String cmd = message.substring(0, pos).trim();
String[] params = message.substring(pos + 1).trim().split(";");
if (cmd.compareToIgnoreCase("load") == 0)
{
load_event(params);
}
else
{
String[] strArr = cmd.split(" ");
if (strArr.length <= 1)
{
System.out
.println(prompt
+ "expected format: >write evnt-id:param1;param2;param3");
continue;
}
cmd = strArr[0];
if (cmd.compareToIgnoreCase("write") == 0)
{
try
{
evtId = Integer.parseInt(strArr[1]);
}
catch (NumberFormatException nfe)
{
System.out
.println(prompt
+ "expected format: >write evnt-id:param1;param2;param3");
continue;
}
write_event(evtId, params);
}
else if (cmd.compareToIgnoreCase("set-dp") == 0)
{
try
{
evtId = Integer.parseInt(strArr[1]);
set_datapoint(evtId);
}
catch (NumberFormatException nfe)
{
set_datapoint(strArr[1]);
}
}
}
continue;
}
// standard command
try
{
evtId = Integer.parseInt(str);
}
catch (NumberFormatException nfe)
{
evtId = 0;
}
if (evtId > 0)
{
try
{
eventServer.cosWriteEventId(eventCtx, evtId);
}
catch (Exception ex)
{
logger_
.error("Can not write event to event server. Exception: "
+ ex.toString());
}
}
else
{
try
{
eventServer.cosWriteEvent(eventCtx, str);
}
catch (Exception ex)
{
logger_
.error("Can not write event to event server. Exception: "
+ ex.toString());
}
}
} while (true);
in.close();
// delete event context
try
{
eventServer.cosDeleteEventContext(eventCtx);
}
catch (Exception ex)
{
logger_
.error("Can not delete event context in event server. Exception: "
+ ex.toString());
return;
}
}
private static void load_event(String[] events)
{
int[] eventIdList = new int[events.length];
for (int i = 0; i < events.length; i++)
{
try
{
eventIdList[i] = Integer.parseInt(events[i]);
}
catch (NumberFormatException nfe)
{
// ignore
}
}
// load the event
try
{
eventServer.cosLoadEvents(eventCtx, eventIdList);
}
catch (Exception ex)
{
logger_
.error("Can not load list of events in event server. Exception: "
+ ex.toString());
return;
}
}
private static void write_event(int eventId, String[] params)
{
try
{
eventServer.cosWriteEventIdParam(eventCtx, eventId, params);
}
catch (Exception ex)
{
logger_.error("Can not write event to event server. Exception: "
+ ex.toString());
}
}
private static void set_datapoint(String datapoint)
{
try
{
eventServer.cosSetDatapointName2(eventCtx, datapoint);
}
catch (Exception ex)
{
logger_.error("Can not write event to event server. Exception: "
+ ex.toString());
}
}
private static void set_datapoint(int keyid)
{
try
{
eventServer.cosSetDatapointName(eventCtx, keyid);
}
catch (Exception ex)
{
logger_.error("Can not write event to event server. Exception: "
+ ex.toString());
}
}
}