/// <summary> /// Add a matching pattern to the collection /// </summary> /// <typeparam name="TContext">Type of context passed to action</typeparam> /// <param name="context">Context passed to action</param> /// <param name="action">Action to invoke on successful match</param> /// <param name="pattern">Compiled pattern containing variables to match</param> /// <returns>ID of the newly added pattern</returns> public int Add <TContext>(TContext context, ErlObject pattern, PatternMatchAction <TContext> action) { int id = ++m_lastID; var pt = new Pattern(id, (p, t, b, args) => action(context, p, t, b, args), pattern); m_patterns.Add(pt); return(id); }
static public void Main(String[] args) { System.Console.Out.WriteLine("Otp test..."); string cookie = OtpNode.defaultCookie; string host = System.Net.Dns.GetHostName(); string remote = (args[0].IndexOf('@') < 0) ? args[0] + "@" + host : args[0]; string nodename = Environment.UserName + "123@" + host; AbstractConnection.traceLevel = OtpTrace.Type.sendThreshold; if (args.Length < 1) { System.Console.Out.WriteLine( "Usage: {0} remotenode [cookie] [-notrace]\n" + " nodename - is the name of the remote Erlang node\n" + " cookie - is the optional cookie string to use\n" + " -name - this node name\n" + " -wire - wire-level tracing\n" + " -notrace - disable debug trace\n", Environment.GetCommandLineArgs()[0]); return; } else if (args.Length > 1 && args[1][0] != '-') { cookie = args[1].ToString(); } for (int i = 0; i < args.Length; i++) { if (args[i].Equals("-wire")) { AbstractConnection.traceLevel = OtpTrace.Type.wireThreshold; } else if (args[i].Equals("-notrace")) { AbstractConnection.traceLevel = OtpTrace.Type.defaultLevel; } else if (args[i].Equals("-name") && i + 1 < args.Length) { nodename = args[i++ + 1]; if (nodename.IndexOf('@') < 0) { nodename += '@' + host; } } } OtpNode node = new OtpNode(false, nodename, cookie, true); System.Console.Out.WriteLine("This node is called {0} and is using cookie='{1}'.", node.node(), node.cookie()); OtpCookedConnection.ConnectTimeout = 2000; OtpCookedConnection conn = node.connection(remote); conn.OnReadWrite += OnReadWrite; if (conn == null) { Console.WriteLine("Can't connect to node " + remote); return; } // If using short names or IP address as the host part of the node name, // get the short name of the peer. remote = conn.peer.node(); System.Console.Out.WriteLine(" successfully connected to node " + remote + "\n"); OtpMbox mbox = null; try { mbox = node.createMbox(); { Otp.Erlang.Object reply = mbox.rpcCall( remote, "lists", "reverse", new Otp.Erlang.List("Abcdef!")); System.Console.Out.WriteLine("<= [REPLY1]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall( remote, "global", "register_name", new Otp.Erlang.List(new Otp.Erlang.Atom("me"), mbox.self())); System.Console.Out.WriteLine("<= [REPLY2]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall(remote, "global", "register_name", new Otp.Erlang.List(new Otp.Erlang.Atom("me"), mbox.self()), 5000); System.Console.Out.WriteLine("<= [REPLY3]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall( remote, "io", "format", new Otp.Erlang.List( "Test: ~w -> ~w\n", new Otp.Erlang.List(mbox.self(), new Otp.Erlang.Atom("ok")) )); System.Console.Out.WriteLine("<= [REPLY4]:" + (reply == null ? "null" : reply.ToString())); } while (true) { Otp.Erlang.Object msg = mbox.receive(); if (msg is Otp.Erlang.Tuple) { Otp.Erlang.Tuple m = msg as Otp.Erlang.Tuple; if (m.arity() == 2 && m.elementAt(0) is Otp.Erlang.Pid) { mbox.send(m.elementAt(0) as Otp.Erlang.Pid, m.elementAt(1)); } } System.Console.Out.WriteLine("IN msg: " + msg.ToString() + "\n"); } } catch (System.Exception e) { System.Console.Out.WriteLine("Error: " + e.ToString()); } finally { node.closeMbox(mbox); } node.close(); }
/// <summary> /// Add a matching pattern to the collection /// </summary> /// <typeparam name="TContext">Type of context passed to action</typeparam> /// <param name="context">Context passed to action</param> /// <param name="pattern">Pattern to compile</param> /// <param name="action">Action to invoke on successful match</param> /// <returns>ID of the newly added pattern</returns> public int Add <TContext>(TContext context, string pattern, PatternMatchAction <TContext> action) { return(Add(context, ErlObject.Format(pattern), action)); }
/// <summary> /// Add a matching pattern to the collection /// </summary> /// <param name="pattern">Pattern to compile</param> /// <param name="action">Action to invoke on successful match</param> /// <returns>ID of the newly added pattern</returns> public int Add(string pattern, PatternMatchAction action) { return(Add(ErlObject.Format(pattern), action)); }
/// <summary> /// Add a matching pattern to the collection /// </summary> /// <typeparam name="TContext">Type of context passed to action</typeparam> /// <param name="context">Context passed to action</param> /// <param name="pattern">Pattern to compile</param> /// <param name="action">Action to invoke on successful match</param> /// <returns>ID of the newly added pattern</returns> public int Add <TContext, TErlTerm>(TContext context, string pattern, PatternMatchAction <TContext, TErlTerm> action ) where TErlTerm : ErlObject { return(Add(context, ErlObject.Format(pattern).Cast <TErlTerm>(), action)); }
static public void Main(String[] args) { { Erlang.Object obj1 = Erlang.Object.Format("{a, b, 10, 2.0}"); Erlang.Object obj2 = Erlang.Object.Format("{a, [b, 1, 2.0, \"abc\"], {1, 2}}"); } System.Console.Out.WriteLine("Otp test..."); string cookie = OtpNode.defaultCookie; AbstractConnection.traceLevel = OtpTrace.Type.sendThreshold; if (args.Length < 1) { System.Console.Out.WriteLine( "Usage: {0} nodename [cookie] [-notrace]\n" + " nodename - is the name of the remote Erlang node\n" + " cookie - is the optional cookie string to use\n" + " -notrace - disable debug trace\n", Environment.GetCommandLineArgs()[0]); return; } else if (args.Length > 1) { cookie = args[1].ToString(); } for (int i = 0; i < args.Length; i++) { if (args[i].Equals("-notrace")) { AbstractConnection.traceLevel = OtpTrace.Type.defaultLevel; break; } } String host = System.Net.Dns.GetHostName(); String remote = (args[0].IndexOf('@') < 0) ? args[0] + "@" + host : args[0]; OtpNode node = new OtpNode(false, Environment.UserName + "123@" + host, cookie, true); System.Console.Out.WriteLine("This node is called {0} and is using cookie='{1}'.", node.node(), node.cookie()); bool ok = node.ping(remote, 1000); if (!ok) { Console.WriteLine("Can't connect to node " + remote); return; } // If using short names, get the short name of the peer. remote = node.connection(remote).peer.node(); if (remote != null) { System.Console.Out.WriteLine(" successfully pinged node " + remote + "\n"); } else { System.Console.Out.WriteLine(" could not ping node " + remote + "\n"); } OtpMbox mbox = null; try { mbox = node.createMbox(); { Otp.Erlang.Object reply = mbox.rpcCall( remote, "lists", "reverse", new Otp.Erlang.List("Abcdef!")); System.Console.Out.WriteLine("<= [REPLY1]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall( remote, "global", "register_name", new Otp.Erlang.List(new Otp.Erlang.Atom("me"), mbox.self())); System.Console.Out.WriteLine("<= [REPLY2]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall(remote, "global", "register_name", new Otp.Erlang.List(new Otp.Erlang.Atom("me"), mbox.self()), 5000); System.Console.Out.WriteLine("<= [REPLY3]:" + (reply == null ? "null" : reply.ToString())); } { Otp.Erlang.Object reply = mbox.rpcCall( remote, "io", "format", new Otp.Erlang.List( "Test: ~w -> ~w\n", new Otp.Erlang.List(mbox.self(), new Otp.Erlang.Atom("ok")) )); System.Console.Out.WriteLine("<= [REPLY4]:" + (reply == null ? "null" : reply.ToString())); } while (true) { Otp.Erlang.Object msg = mbox.receive(); if (msg is Otp.Erlang.Tuple) { Otp.Erlang.Tuple m = msg as Otp.Erlang.Tuple; if (m.arity() == 2 && m.elementAt(0) is Otp.Erlang.Pid) { mbox.send(m.elementAt(0) as Otp.Erlang.Pid, m.elementAt(1)); } } System.Console.Out.WriteLine("IN msg: " + msg.ToString() + "\n"); } } catch (System.Exception e) { System.Console.Out.WriteLine("Error: " + e.ToString()); } finally { node.closeMbox(mbox); } node.close(); }