⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addagent.cs

📁 SRI international 发布的OAA框架软件
💻 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 + -