📄 addagent.cs
字号:
using System;
using com.sri.sedc.javanetbridge;
using jnb.com.sri.sedc.javanetbridge;
using jnb.com.sri.oaa2.lib;
using jnb.com.sri.oaa2.icl;
using jnb.com.sri.oaa2.com;
using jnb.java.lang;
namespace com.sri.oaa2.agent.add
{
/// <summary>
/// OAA agent which adds two numbers together.
/// </summary>
class AddAgent : OAAEventListener_CallbackImpl
{
const String AGENT_NAME = "csharp_addAgent";
const String ADD_NAME = "add";
const String CONNECTION_ID = "parent";
private LibOaa myOaa;
/// <summary>
/// The main entry point for the application.
/// </summary>
/// Important: The thread must be MTA
[MTAThread]
static void Main(string[] args)
{
// These commands can be used to change the ip address and port of the proxy agent.
// They must be called before any .NET APIs are acccessed below. By default it is
// assumed the java proxy is running on this machine on port 4016.
//JavaNetBridgeInteropClass.setConnectAddress(System.Net.IPAddress.Parse("128.18.233.111"));
//JavaNetBridgeInteropClass.setConnectPort(4080);
// By default, this app is reentrant. Uncomment this line to make it non-reentrant.
//JavaNetBridgeInteropClass.setReentrant(false);
JavaNetBridgeBean bean = Oaa2JavaInterop.getSingleton().getJavaNetBridgeBean();
// Don't trace method calls. This slows down calls significantly. Tracing
// method calls is useful for debugging, so this can be turned on for
// debugging.
bean.setTraceMethods(false);
AddAgent agent = new AddAgent();
agent.init();
// Loop forever. The add agent will run until the app is terminated.
while (true)
{
System.Threading.Thread.Sleep(10000);
System.GC.Collect();
}
}
private void debug(String msg)
{
Console.WriteLine(AGENT_NAME + ": " + msg);
}
public override bool doOAAEvent(IclTerm goalTerm, IclList parameters, IclList answers)
{
debug("doOAAEvent called, goal = " + goalTerm);
String goal = goalTerm.toIdentifyingString();
if (goal.Equals(ADD_NAME))
{
int num1 = ((IclInt)goalTerm.getTerm(0)).toInt();
// Other ways to do this are:
//int num1 = goalTerm.getTerm(0).iclInt();
//int num1 = ToInt.getInstance().from(goalTerm.getTerm(0));
int num2 = ((IclInt)goalTerm.getTerm(1)).toInt();
int sum = num1 + num2;
IclStruct answer = new IclStruct(ADD_NAME,
new IclInt(num1),
new IclInt(num2),
new IclInt(sum));
answers.add(answer);
return true;
}
return false;
}
public String getAgentCapabilities()
{
return "[" + ADD_NAME + "(Num1, Num2, Sum)]";
}
public String getAgentName()
{
return AGENT_NAME;
}
public void init()
{
LibComTcpProtocol protocol = new LibComTcpProtocol();
LibCom com = new LibCom(protocol, null);
myOaa = new LibOaa(com);
if (!myOaa.oaaSetupCommunication(getAgentName()))
{
throw new System.Exception("Failed to setup OAA communication");
}
debug("Connection Made");
IclTerm solveables = IclTerm.fromString(true, getAgentCapabilities());
debug("Registering " + getAgentName());
if (!myOaa.oaaRegister(CONNECTION_ID, getAgentName(), solveables, new IclList()))
{
throw new System.Exception("Failed to register");
}
myOaa.oaaRegisterCallback("app_do_event", this);
myOaa.oaaReady(true);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -