Skip to content
forked from zeromq/clrzmq4

ZeroMQ C# namespace (.NET and mono, Windows, Linux and MacOSX, x86 and amd64)

License

Notifications You must be signed in to change notification settings

owoudenberg/clrzmq4

This branch is 636 commits ahead of, 87 commits behind zeromq/clrzmq4:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7131557 · Nov 12, 2017
Sep 17, 2015
Jul 11, 2017
Sep 11, 2017
Sep 18, 2017
Sep 18, 2017
Nov 9, 2017
Sep 9, 2017
Sep 19, 2017
Sep 22, 2017
Feb 18, 2015
Sep 8, 2017
Jan 6, 2015
Jan 6, 2015
May 15, 2017
Oct 10, 2015
May 17, 2017
Aug 20, 2015
Oct 10, 2015
Jun 29, 2017
Sep 6, 2017
May 17, 2017
Feb 16, 2015
Jul 5, 2017
Jan 6, 2015
Jan 22, 2015
Feb 12, 2015
Jan 22, 2015
Nov 9, 2017
Jun 1, 2017
Jan 6, 2015
Sep 17, 2015
Jun 3, 2015
Mar 24, 2015
Jun 7, 2017
Sep 8, 2017
Feb 9, 2015
Nov 9, 2017
Feb 4, 2015
Feb 4, 2015
Nov 9, 2017
Sep 22, 2017
Dec 25, 2014
Sep 9, 2017
Sep 9, 2017
Nov 12, 2017
Jul 5, 2017
Sep 19, 2017
May 20, 2017
Sep 11, 2017
Sep 19, 2017
Jul 4, 2017
Jul 4, 2017

Repository files navigation

Build status Build Status Coverage Status

ZeroMQ C# library

clrzmq4 is a .NET wrapper around the native ZeroMQ/libzmq library, and provides the ZeroMQ namespace.

It is written in C# 5.0, and can be built using Visual Studio 2012+ and Mono 5+.

It is built as AnyCPU to run on .NET Framework 4.0+ and mono 5+, and can currently load native shared libraries for i386 and amd64 on Windows, GNU/Linux and Mac OS X.

The pre-built binary packages include native shared libraries for Windows (libzmq 4.2.2) and GNU/Linux (libzmq 4.1.7), for the i386 and amd64 architectures. You can replace the native shared libraries, any libzmq 4.x should work.

Get it

Read ZeroMQ - The Guide

Ask questions on stackoverflow using tags C# ZeroMQ !

HWClient Example

public static void HWClient(string[] args)
{
	//
	// Hello World client
	//
	// Author: metadings
	//

	// Create
	// using (var context = new ZContext())
	using (var requester = new ZSocket(ZSocketType.REQ))
	{
		// Connect
		requester.Connect("tcp://127.0.0.1:5555");

		for (int n = 0; n < 10; ++n)
		{
			string requestText = "Hello";
			Console.Write("Sending {0}...", requestText);

			// Send
			requester.Send(new ZFrame(requestText));

			// Receive
			using (ZFrame reply = requester.ReceiveFrame()) 
			{
				Console.WriteLine(" Received: {0} {1}!", requestText, reply.ReadString());
			}
		}
	}
}

HWServer Example

public static void HWServer(string[] args)
{
	//
	// Hello World server
	//
	// Author: metadings
	//

	if (args == null || args.Length < 1)
	{
		Console.WriteLine();
		Console.WriteLine("Usage: ./{0} HWServer [Name]", AppDomain.CurrentDomain.FriendlyName);
		Console.WriteLine();
		Console.WriteLine("    Name   Your name. Default: World");
		Console.WriteLine();
		args = new string[] { "World" };
	}

	string name = args[0];

	// Create
	// using (var context = new ZContext())
	using (var responder = new ZSocket(ZSocketType.REP))
	{
		// Bind
		responder.Bind("tcp://*:5555");

		while (true)
		{
			// Receive
			using (ZFrame request = responder.ReceiveFrame())
			{
				Console.WriteLine("Received {0}", request.ReadString());

				// Do some work
				Thread.Sleep(1);

				// Send
				responder.Send(new ZFrame(name));
			}
		}
	}
}

WUClient Example

public static void WUClient(string[] args)
{
	//
	// Weather update client
	// Connects SUB socket to tcp://localhost:5556
	// Collects weather updates and finds avg temp in zipcode
	//
	// Author: metadings
	//

	if (args == null || args.Length < 2)
	{
		Console.WriteLine();
		Console.WriteLine("Usage: ./{0} WUClient [ZipCode] [Endpoint]", AppDomain.CurrentDomain.FriendlyName);
		Console.WriteLine();
		Console.WriteLine("    ZipCode   The zip code to subscribe. Default is 72622 Nürtingen");
		Console.WriteLine("    Endpoint  Where WUClient should connect to.");
		Console.WriteLine("              Default is tcp://127.0.0.1:5556");
		Console.WriteLine();
		if (args.Length < 1)
			args = new string[] { "72622", "tcp://127.0.0.1:5556" };
		else
			args = new string[] { args[0], "tcp://127.0.0.1:5556" };
	}

	// Socket to talk to server
	// using (var context = new ZContext())
	using (var subscriber = new ZSocket(ZSocketType.SUB))
	{
		string connect_to = args[1];
		Console.WriteLine("I: Connecting to {0}...", connect_to);
		subscriber.Connect(connect_to);

		// Subscribe to zipcode
		string zipCode = args[0];
		Console.WriteLine("I: Subscribing to zip code {0}...", zipCode);
		subscriber.Subscribe(zipCode);

		// Process 10 updates
		int i = 0;
		long total_temperature = 0;
		for (; i < 20; ++i)
		{
			using (var replyFrame = subscriber.ReceiveFrame())
			{
				string reply = replyFrame.ReadString();

				Console.WriteLine(reply);
				total_temperature += Convert.ToInt64(reply.Split(' ')[1]);
			}
		}
		Console.WriteLine("Average temperature for zipcode '{0}' was {1}°", zipCode, (total_temperature / i));
	}
}

WUServer Example

public static void WUServer(string[] args)
{
	//
	// Weather update server
	// Binds PUB socket to tcp://*:5556
	// Publishes random weather updates
	//
	// Author: metadings
	//

	// Prepare our (context and) publisher
	// using (var context = new ZContext())
	using (var publisher = new ZSocket(ZSocketType.PUB))
	{
		string address = "tcp://*:5556";
		Console.WriteLine("I: Publisher.Bind'ing on {0}", address);
		publisher.Bind(address);

		// Initialize random number generator
		var rnd = new Random();

		while (true)
		{
			// Get values that will fool the boss
			int zipcode = rnd.Next(99999);
			int temperature = rnd.Next(-55, +45);

			// Send message to all subscribers
			var update = string.Format("{0:D5} {1}", zipcode, temperature);
			using (var updateFrame = new ZFrame(update))
			{
				publisher.Send(updateFrame);
			}
		}
	}
}

Also look into the WUProxy Example.

Learn more: ZeroMQ - The Guide and the Examples in C#

About

ZeroMQ C# namespace (.NET and mono, Windows, Linux and MacOSX, x86 and amd64)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 98.1%
  • Shell 1.5%
  • Other 0.4%