Receive() public method

Receive a ZreMsg from the socket. Message is ignored if the message signature doesn't start with %xAA %xA1 (returns false). It appears "real" input will always be a RouterSocket, but DealerSocket is used during unit testing by zeromq/zyre and by this implementation.
public Receive ( IReceivingSocket input ) : bool
input IReceivingSocket the socket
return bool
Example #1
0
        /// <summary>
        /// Return a new ZreMsg based received from the input socket.
        /// Message is ignored if input is a RouterSocket and the message header doesn't meet the http://rfc.zeromq.org/spec:36 spec.
        /// Message is ignored if the message signature doesn't start with %xAA %xA1.
        /// </summary>
        /// <param name="input">the socket</param>
        /// <param name="uuid">The identity Guid received into the RoutingId, or Guid.Empty</param>
        /// <returns>null if not a valid message (message to be ignored)</returns>
        public static ZreMsg ReceiveNew(RouterSocket input, out Guid uuid)
        {
            var msg = new ZreMsg();

            if (msg.Receive(input))
            {
                if (msg.RoutingId.Length != 17 || msg.RoutingId[0] != 0x1)
                {
                    uuid = Guid.Empty;
                    return(null);
                }
                uuid = GetUuid(msg.RoutingId, 1);
                return(msg);
            }
            uuid = Guid.Empty;
            return(null);
        }
Example #2
0
 /// <summary>
 /// Return a new ZreMsg based received from the input socket.
 /// Message is ignored if input is a RouterSocket and the message header doesn't meet the http://rfc.zeromq.org/spec:36 spec.
 /// Message is ignored if the message signature doesn't start with %xAA %xA1.
 /// </summary>
 /// <param name="input">the socket</param>
 /// <param name="uuid">The identity Guid received into the RoutingId, or Guid.Empty</param>
 /// <returns>null if not a valid message (message to be ignored)</returns>
 public static ZreMsg ReceiveNew(RouterSocket input, out Guid uuid)
 {
     var msg = new ZreMsg();
     if (msg.Receive(input))
     {
         if (msg.RoutingId.Length != 17 || msg.RoutingId[0] != 0x1)
         {
             uuid = Guid.Empty;
             return null;
         }
         uuid = GetUuid(msg.RoutingId, 1);
         return msg;
     }
     uuid = Guid.Empty;
     return null;
 }
Example #3
0
		public void WhisperTest()
		{
			Action<ZreMsg> setMessage = m => 
			{
				m.Id = ZreMsg.MessageId.Whisper;

				m.Whisper.Sequence = 123;
			};

			Action<ZreMsg> checkMessage = m=> 
			{
				Assert.That(m.Id, Is.EqualTo(ZreMsg.MessageId.Whisper));
				Assert.That(m.Whisper.Sequence, Is.EqualTo(123));               
				Assert.That(m.Whisper.Content.FrameCount, Is.EqualTo(1));                
			};

			using (NetMQContext context = NetMQContext.Create())
			using (var client = context.CreateDealerSocket())
			using (var server = context.CreateRouterSocket())
			{
				server.Bind("inproc://zprototest");
				client.Connect("inproc://zprototest");

				ZreMsg clientMessage = new ZreMsg();
				ZreMsg serverMessage = new ZreMsg();

				for (int i=0; i < 2; i++)
				{
					// client send message to server
					setMessage(clientMessage);				
					clientMessage.Send(client);				
												
					// server receive the message
					serverMessage.Receive(server);
				
					// check that message received ok
					Assert.That(serverMessage.RoutingId, Is.Not.Null);					
					checkMessage(serverMessage);

					// reply to client, no need to set the message, using client data
					serverMessage.Send(server);

					// client receive the message
					clientMessage.Receive(client);
				
					// check that message received ok
					Assert.That(clientMessage.RoutingId, Is.Null);					
					checkMessage(clientMessage);
				}				
			}			
		}	
Example #4
0
		public void LeaveTest()
		{
			Action<ZreMsg> setMessage = m => 
			{
				m.Id = ZreMsg.MessageId.Leave;

				m.Leave.Sequence = 123;
    			m.Leave.Group = "Life is short but Now lasts for ever";
				m.Leave.Status = 123;
			};

			Action<ZreMsg> checkMessage = m=> 
			{
				Assert.That(m.Id, Is.EqualTo(ZreMsg.MessageId.Leave));
				Assert.That(m.Leave.Sequence, Is.EqualTo(123));                 
				Assert.That(m.Leave.Group, Is.EqualTo("Life is short but Now lasts for ever"));                            
				Assert.That(m.Leave.Status, Is.EqualTo(123));                   
			};

			using (NetMQContext context = NetMQContext.Create())
			using (var client = context.CreateDealerSocket())
			using (var server = context.CreateRouterSocket())
			{
				server.Bind("inproc://zprototest");
				client.Connect("inproc://zprototest");

				ZreMsg clientMessage = new ZreMsg();
				ZreMsg serverMessage = new ZreMsg();

				for (int i=0; i < 2; i++)
				{
					// client send message to server
					setMessage(clientMessage);				
					clientMessage.Send(client);				
												
					// server receive the message
					serverMessage.Receive(server);
				
					// check that message received ok
					Assert.That(serverMessage.RoutingId, Is.Not.Null);					
					checkMessage(serverMessage);

					// reply to client, no need to set the message, using client data
					serverMessage.Send(server);

					// client receive the message
					clientMessage.Receive(client);
				
					// check that message received ok
					Assert.That(clientMessage.RoutingId, Is.Null);					
					checkMessage(clientMessage);
				}				
			}			
		}	
Example #5
0
		public void HelloTest()
		{
			Action<ZreMsg> setMessage = m => 
			{
				m.Id = ZreMsg.MessageId.Hello;

				m.Hello.Sequence = 123;
    			m.Hello.Endpoint = "Life is short but Now lasts for ever";
				m.Hello.Groups = new List<string>();
				m.Hello.Groups.Add("Name: Brutus");
				m.Hello.Groups.Add("Age: 43");               
				m.Hello.Status = 123;
    			m.Hello.Name = "Life is short but Now lasts for ever";
				m.Hello.Headers = new Dictionary<string,string>();
				m.Hello.Headers.Add("Name", "Brutus");
				m.Hello.Headers.Add("Age", "43");              
			};

			Action<ZreMsg> checkMessage = m=> 
			{
				Assert.That(m.Id, Is.EqualTo(ZreMsg.MessageId.Hello));
				Assert.That(m.Hello.Sequence, Is.EqualTo(123));                 
				Assert.That(m.Hello.Endpoint, Is.EqualTo("Life is short but Now lasts for ever"));                         
				Assert.That(m.Hello.Groups.Count, Is.EqualTo(2));
				Assert.That(m.Hello.Groups[0], Is.EqualTo("Name: Brutus"));                           
				Assert.That(m.Hello.Groups[1], Is.EqualTo("Age: 43"));                                           
				Assert.That(m.Hello.Status, Is.EqualTo(123));                   
				Assert.That(m.Hello.Name, Is.EqualTo("Life is short but Now lasts for ever"));                             
				Assert.That(m.Hello.Headers.Count, Is.EqualTo(2));
				Assert.That(m.Hello.Headers["Name"], Is.EqualTo("Brutus"));                          
				Assert.That(m.Hello.Headers["Age"], Is.EqualTo("43"));                                          
			};

			using (NetMQContext context = NetMQContext.Create())
			using (var client = context.CreateDealerSocket())
			using (var server = context.CreateRouterSocket())
			{
				server.Bind("inproc://zprototest");
				client.Connect("inproc://zprototest");

				ZreMsg clientMessage = new ZreMsg();
				ZreMsg serverMessage = new ZreMsg();

				for (int i=0; i < 2; i++)
				{
					// client send message to server
					setMessage(clientMessage);				
					clientMessage.Send(client);				
												
					// server receive the message
					serverMessage.Receive(server);
				
					// check that message received ok
					Assert.That(serverMessage.RoutingId, Is.Not.Null);					
					checkMessage(serverMessage);

					// reply to client, no need to set the message, using client data
					serverMessage.Send(server);

					// client receive the message
					clientMessage.Receive(client);
				
					// check that message received ok
					Assert.That(clientMessage.RoutingId, Is.Null);					
					checkMessage(clientMessage);
				}				
			}			
		}