From d14cfa7534c65e2c4b5f589bf292be5ab2f1215a Mon Sep 17 00:00:00 2001 From: Arnaud Simon Date: Tue, 30 Sep 2008 12:54:47 +0000 Subject: qpid-1277: Added examples git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@700439 13f79535-47bb-0310-9956-ffa450edef68 --- .../example-request-response-Client/Client.cs | 137 +++++++++++++++++++++ .../Properties/AssemblyInfo.cs | 33 +++++ .../example-request-response-Client/default.build | 26 ++++ .../example-request-response-Client.csproj | 53 ++++++++ 4 files changed, 249 insertions(+) create mode 100644 dotnet/client-010/examples/request-response/example-request-response-Client/Client.cs create mode 100644 dotnet/client-010/examples/request-response/example-request-response-Client/Properties/AssemblyInfo.cs create mode 100644 dotnet/client-010/examples/request-response/example-request-response-Client/default.build create mode 100644 dotnet/client-010/examples/request-response/example-request-response-Client/example-request-response-Client.csproj (limited to 'dotnet/client-010/examples/request-response/example-request-response-Client') diff --git a/dotnet/client-010/examples/request-response/example-request-response-Client/Client.cs b/dotnet/client-010/examples/request-response/example-request-response-Client/Client.cs new file mode 100644 index 0000000000..1d361199f1 --- /dev/null +++ b/dotnet/client-010/examples/request-response/example-request-response-Client/Client.cs @@ -0,0 +1,137 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +using System; +using System.IO; +using System.Text; +using System.Threading; +using org.apache.qpid.client; +using org.apache.qpid.transport; + +namespace org.apache.qpid.example.requestresponse +{ + /// + /// This program is one of two programs that illustrate the + /// request/response pattern. + /// + /// Client (this program): + /// Make requests of a service, print the response. + /// + /// Server: + /// Accept requests, set the letters to uppercase in each message, and + /// return it as a response. + /// + /// + internal class Client + { + private static void Main(string[] args) + { + string host = args.Length > 0 ? args[0] : "localhost"; + int port = args.Length > 1 ? Convert.ToInt32(args[1]) : 5672; + client.Client connection = new client.Client(); + try + { + connection.connect(host, port, "test", "guest", "guest"); + ClientSession session = connection.createSession(50000); + IMessage request = new Message(); + + //--------- Main body of program -------------------------------------------- + // Create a response queue so the server can send us responses + // to our requests. Use the client's session ID as the name + // of the response queue. + string response_queue = "client" + session.getName(); + // Use the name of the response queue as the routing key + session.queueDeclare(response_queue); + session.exchangeBind(response_queue, "amq.direct", response_queue); + + // Each client sends the name of their own response queue so + // the service knows where to route messages. + request.DeliveryProperties.setRoutingKey("request"); + request.MessageProperties.setReplyTo(new ReplyTo("amq.direct", response_queue)); + + lock (session) + { + // Create a listener for the response queue and listen for response messages. + Console.WriteLine("Activating response queue listener for: " + response_queue); + IMessageListener listener = new ClientMessageListener(session); + session.attachMessageListener(listener, response_queue); + session.messageSubscribe(response_queue); + + // Now send some requests ... + string[] strs = { + "Twas brillig, and the slithy toves", + "Did gire and gymble in the wabe.", + "All mimsy were the borogroves,", + "And the mome raths outgrabe.", + "That's all, folks!" + }; + foreach (string s in strs) + { + request.clearData(); + request.appendData(Encoding.UTF8.GetBytes(s)); + session.messageTransfer("amq.direct", request); + } + Console.WriteLine("Waiting for all responses to arrive ..."); + Monitor.Wait(session); + } + //--------------------------------------------------------------------------- + + connection.close(); + } + catch (Exception e) + { + Console.WriteLine("Error: \n" + e.StackTrace); + } + } + } + + public class ClientMessageListener : IMessageListener + { + private readonly ClientSession _session; + private readonly RangeSet _range = new RangeSet(); + private int _counter; + public ClientMessageListener(ClientSession session) + { + _session = session; + } + + public void messageTransfer(IMessage m) + { + _counter++; + BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8); + byte[] body = new byte[m.Body.Length - m.Body.Position]; + reader.Read(body, 0, body.Length); + ASCIIEncoding enc = new ASCIIEncoding(); + string message = enc.GetString(body); + Console.WriteLine("Response: " + message); + // Add this message to the list of message to be acknowledged + _range.add(m.Id); + if (_counter == 4) + { + Console.WriteLine("Shutting down listener for " + m.DeliveryProperties.getRoutingKey()); + // Acknowledge all the received messages + _session.messageAccept(_range); + lock (_session) + { + Monitor.Pulse(_session); + } + } + } + } +} diff --git a/dotnet/client-010/examples/request-response/example-request-response-Client/Properties/AssemblyInfo.cs b/dotnet/client-010/examples/request-response/example-request-response-Client/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..d1ac2473de --- /dev/null +++ b/dotnet/client-010/examples/request-response/example-request-response-Client/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("example-request-response-Client")] +[assembly: AssemblyDescription("Built from svn revision number: ")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apache Software Foundation")] +[assembly: AssemblyProduct("example-request-response-Client")] +[assembly: AssemblyCopyright("Apache Software Foundation")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("08bf6aed-bf79-4d16-9a28-6363d5322cdd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("0.10.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/dotnet/client-010/examples/request-response/example-request-response-Client/default.build b/dotnet/client-010/examples/request-response/example-request-response-Client/default.build new file mode 100644 index 0000000000..760419b325 --- /dev/null +++ b/dotnet/client-010/examples/request-response/example-request-response-Client/default.build @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/dotnet/client-010/examples/request-response/example-request-response-Client/example-request-response-Client.csproj b/dotnet/client-010/examples/request-response/example-request-response-Client/example-request-response-Client.csproj new file mode 100644 index 0000000000..2d32dd6b66 --- /dev/null +++ b/dotnet/client-010/examples/request-response/example-request-response-Client/example-request-response-Client.csproj @@ -0,0 +1,53 @@ + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {1BC63815-4029-4039-9207-35E7E06ECC99} + Exe + Properties + example_request_response_Client + example-request-response-Client + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + {B911FFD7-754F-4735-A188-218D5065BE79} + Client + + + + + \ No newline at end of file -- cgit v1.2.1