// Majordomo Protocol client example // Uses the mdcli API to hide all MDP aspects public static void MDClient(string[] args) { bool verbose = (args.Any(e => e.ToLower().Equals("-v") || e.ToLower().Equals("--verbose"))); Console.WriteLine("Verbose: {0}", verbose); CancellationTokenSource cts = new CancellationTokenSource(); Console.CancelKeyPress += (s, ea) => { ea.Cancel = true; cts.Cancel(); }; using (MajordomoClient session = new MajordomoClient("tcp://127.0.0.1:5555", verbose)) { int count; for (count = 0; count < 100000; count++) { ZMessage request = new ZMessage(); request.Prepend(new ZFrame("Hello world")); using (ZMessage reply = session.Send("echo", request, cts)) if (reply == null) { break; } // Interrupt or failure } Console.WriteLine("{0} requests/replies processed\n", count); } }
// Majordomo Protocol client example // Uses the mdcli API to hide all MDP aspects public static void MDClient2(string[] args) { CancellationTokenSource cts = new CancellationTokenSource(); Console.CancelKeyPress += (s, ea) => { ea.Cancel = true; cts.Cancel(); }; using (MajordomoClient session = new MajordomoClient("tcp://127.0.0.1:5555", Verbose)) { int count; for (count = 0; count < 100000 && !cts.IsCancellationRequested; count++) { ZMessage request = new ZMessage(); request.Prepend(new ZFrame("Hello world")); session.Send("echo", request, cts); } for (count = 0; count < 100000 && !cts.IsCancellationRequested; count++) { using (ZMessage reply = session.Recv(cts)) if (reply == null) { break; } // Interrupt or failure } Console.WriteLine("{0} replies received\n", count); } }
// Calls a TSP service // Returns response if successful (status code 200 OK), else NULL static ZMessage TIClient_ServiceCall(MajordomoClient session, string service, ZMessage request, CancellationTokenSource cts) { using (var reply = session.Send(service, request, cts)) { if (reply != null) { var status = reply.PopString(); if (status.Equals("200")) { return(reply.Duplicate()); } else if (status.Equals("400")) { "E: client fatal error, aborting".DumpString(); cts.Cancel(); } else if (status.Equals("500")) { "E: server fatal error, aborting".DumpString(); cts.Cancel(); } } else { cts.Cancel(); // Interrupted or failed } } return(null); }
// MMI echo query example public static void MMIEcho(string[] args) { CancellationTokenSource cancellor = new CancellationTokenSource(); Console.CancelKeyPress += (s, ea) => { ea.Cancel = true; cancellor.Cancel(); }; using (MajordomoClient session = new MajordomoClient("tcp://127.0.0.1:5555", Verbose)) { ZMessage request = new ZMessage(); request.Add(new ZFrame("echo")); ZMessage reply = session.Send("mmi.service", request, cancellor); if (reply != null) { var replycode = reply[0].ToString(); "Loopup echo service: {0}\n".DumpString(replycode); reply.Dispose(); } else { "E: no response from broker, make sure it's running\n".DumpString(); } } }
// MMI echo query example public static void MMIEcho(string[] args) { bool verbose = (args.Any(e => e.ToLower().Equals("-v") || e.ToLower().Equals("--verbose"))); Console.WriteLine("Verbose: {0}", verbose); CancellationTokenSource cancellor = new CancellationTokenSource(); Console.CancelKeyPress += (s, ea) => { ea.Cancel = true; cancellor.Cancel(); }; using (MajordomoClient session = new MajordomoClient("tcp://localhost:5555", verbose)) { ZMessage request = new ZMessage(); request.Add(new ZFrame("echo")); ZMessage reply = session.Send("mmi.service", request, cancellor); if (reply != null) { var replycode = reply[0].ToString(); "Loopup echo service: {0}\n".DumpString(replycode); reply.Dispose(); } else { "E: no response from broker, make sure it's running\n".DumpString(); } } }
public static void TIClient(string[] args) { CancellationTokenSource cancellor = new CancellationTokenSource(); Console.CancelKeyPress += (s, ea) => { ea.Cancel = true; cancellor.Cancel(); }; using (MajordomoClient session = new MajordomoClient("tcp://127.0.0.1:5555", Verbose)) { // 1. Send 'echo' request to Titanic ZMessage request = new ZMessage(); request.Add(new ZFrame("echo")); request.Add(new ZFrame("Hello World")); Guid uuid = Guid.Empty; using (var reply = TIClient_ServiceCall(session, "titanic.request", request, cancellor)) { if (reply != null) { uuid = Guid.Parse(reply.PopString()); "I: request UUID {0}".DumpString(uuid); } } // 2. Wait until we get a reply while (!cancellor.IsCancellationRequested) { Thread.Sleep(100); request.Dispose(); request = new ZMessage(); request.Add(new ZFrame(uuid.ToString())); var reply = TIClient_ServiceCall(session, "titanic.reply", request, cancellor); if (reply != null) { string replystring = reply.Last().ToString(); "Reply: {0}\n".DumpString(replystring); reply.Dispose(); // 3. Close Request request.Dispose(); request = new ZMessage(); request.Add(new ZFrame(uuid.ToString())); reply = TIClient_ServiceCall(session, "titanic.close", request, cancellor); reply.Dispose(); break; } else { "I: no reply yet, trying again...\n".DumpString(); Thread.Sleep(5000); // try again in 5 seconds } } } }
// .split try to call a service // Here, we first check if the requested MDP service is defined or not, // using a MMI lookup to the Majordomo broker. If the service exists, // we send a request and wait for a reply using the conventional MDP // client API. This is not meant to be fast, just very simple: static bool Titanic_ServiceSuccess(Guid uuid, CancellationTokenSource cts) { // Load request message, service will be first frame string fn = TitanicCommon.RequestFilename(uuid); FileStream fs; if (!fn.TryFileOpenRead(out fs)) { // If the client already close request, treat as successful return(true); } fs.Dispose(); ZMessage request = fn.DeserializeFromXml <ZMessage>(); var service = request.Pop(); string servicename = service.ToString(); bool res = false; // Create MDP client session with short timeout using (var client = new MajordomoClient("tcp://127.0.0.1:5555", false)) { client.Set_Timeout(1000); // 1sec client.Set_Retries(1); // only 1 retry // Use MMI protocol to check if service is available ZMessage mmirequest = new ZMessage { service }; bool service_ok; using (var mmireply = client.Send("mmi.service", mmirequest, cts)) service_ok = (mmireply != null && mmireply.First().ToString().Equals("200")); res = false; if (service_ok) { using (ZMessage reply = client.Send(servicename, request, cts)) if (reply != null) { fn = TitanicCommon.ReplyFilename(uuid); reply.SerializeToXml(fn); res = true; } else { request.Dispose(); } } } return(res); }