Skip to content

Instantly share code, notes, and snippets.

@tomliversidge
Created April 10, 2017 20:33
Show Gist options
  • Save tomliversidge/184f925879dc284c012a933aebd75a9b to your computer and use it in GitHub Desktop.
Save tomliversidge/184f925879dc284c012a933aebd75a9b to your computer and use it in GitHub Desktop.
watch_test
[Fact]
public async void CanWatchRemoteActor()
{
var props = Actor.FromProducer(() => new LocalActor());
var localActor = Actor.SpawnNamed(props, "local watcher");
var remoteActorName = Guid.NewGuid().ToString();
var remoteActor = await Remote.SpawnNamedAsync("127.0.0.1:12000", remoteActorName, "remote", TimeSpan.FromSeconds(5));
remoteActor.Tell(new Watch { Watcher = localActor });
await Task.Delay(TimeSpan.FromSeconds(3));
remoteActor.Stop();
await Task.Delay(TimeSpan.FromSeconds(3)); //wait for stop to happen before assertion
var terminatedMessageReceived = await localActor.RequestAsync<bool>("terminate received?", TimeSpan.FromSeconds(5));
Assert.True(terminatedMessageReceived);
}
public class LocalActor : IActor
{
private bool _terminateReceived;
public Task ReceiveAsync(IContext context)
{
switch (context.Message)
{
case string msg when msg == "terminate received?":
context.Sender.Tell(_terminateReceived);
break;
case Terminated msg:
_terminateReceived = true;
break;
}
return Actor.Done;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment