public TestState handle(System.Collections.IList context, Message <TestMessage> message, MessageHolder outgoing) { context.add(message.MessageType); switch (message.MessageType) { case message1: { outgoing.offer(@internal(TestMessage.Message2)); outgoing.offer(@internal(TestMessage.Message3)); break; } case message2: { outgoing.offer(@internal(TestMessage.Message4)); outgoing.offer(@internal(TestMessage.Message5)); break; } default: break; } return(this); }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void shouldAlwaysAddItsInstanceIdToOutgoingMessages() public virtual void ShouldAlwaysAddItsInstanceIdToOutgoingMessages() { InstanceId me = new InstanceId(42); //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final java.util.List<org.neo4j.cluster.com.message.Message> sentOut = new java.util.LinkedList<>(); IList <Message> sentOut = new LinkedList <Message>(); /* * Lots of setup required. Must have a sender that keeps messages so we can see what the machine sent out. * We must have the StateMachines actually delegate the incoming message and retrieve the generated outgoing. * That means we need an actual StateMachine with a registered MessageType. And most of those are void * methods, which means lots of Answer objects. */ // Given MessageSender sender = mock(typeof(MessageSender)); // The sender, which adds messages outgoing to the list above. doAnswer(invocation => { ((IList <Org.Neo4j.cluster.com.message.Message>)sentOut).AddRange(invocation.getArgument(0)); return(null); }).when(sender).process(ArgumentMatchers.any <IList <Message <? extends MessageType> > >()); StateMachines stateMachines = new StateMachines(NullLogProvider.Instance, mock(typeof(StateMachines.Monitor)), mock(typeof(MessageSource)), sender, mock(typeof(Timeouts)), mock(typeof(DelayedDirectExecutor)), ThreadStart.run, me); // The state machine, which has a TestMessage message type and simply adds a HEADER_TO header to the messages it // is handed to handle. StateMachine machine = mock(typeof(StateMachine)); when(machine.MessageType).then((Answer <object>)invocation => typeof(TestMessage)); doAnswer(invocation => { Message message = invocation.getArgument(0); MessageHolder holder = invocation.getArgument(1); message.setHeader(Message.HEADER_TO, "to://neverland"); holder.offer(message); return(null); }).when(machine).handle(any(typeof(Message)), any(typeof(MessageHolder))); stateMachines.AddStateMachine(machine); // When stateMachines.Process(Message.@internal(TestMessage.Message1)); // Then assertEquals("StateMachines should not make up messages from thin air", 1, sentOut.Count); Message sent = sentOut[0]; assertTrue("StateMachines should add the instance-id header", sent.hasHeader(Message.HEADER_INSTANCE_ID)); assertEquals("StateMachines should add instance-id header that has the correct value", me.ToString(), sent.getHeader(Message.HEADER_INSTANCE_ID)); }
public override bool Process <T1>(Message <T1> message) where T1 : Org.Neo4j.cluster.com.message.MessageType { if (!message.Internal && !message.MessageType.Equals(HeartbeatMessage.IAmAlive)) { try { string to = message.GetHeader(Message.HEADER_TO); InstanceId serverId = _clusterContext.Configuration.getIdForUri(new URI(to)); if (!_clusterContext.isMe(serverId)) { _outgoing.offer(Message.@internal(HeartbeatMessage.ResetSendHeartbeat, serverId)); } } catch (URISyntaxException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } return(true); }