public Task Decode(string message) { var parts = message.Split(','); var grain = DeviceGrainFactory.GetGrain(long.Parse(parts[0])); return(grain.SetTemperature(double.Parse(parts[1]))); }
static void Main(string[] args) { // The Orleans silo environment is initialized in its own app domain in order to more // closely emulate the distributed situation, when the client and the server cannot // pass data via shared memory. AppDomain hostDomain = AppDomain.CreateDomain("OrleansHost", null, new AppDomainSetup { AppDomainInitializer = InitSilo, AppDomainInitializerArguments = args, }); Orleans.OrleansClient.Initialize("DevTestClientConfiguration.xml"); // TODO: once the previous call returns, the silo is up and running. // This is the place your custom logic, for example calling client logic // or initializing an HTTP front end for accepting incoming requests. Console.WriteLine("Orleans Silo is running.\nPress Enter to terminate..."); var grain = DeviceGrainFactory.GetGrain(0); while (true) { grain.SetTemperature(double.Parse(Console.ReadLine())); } hostDomain.DoCallBack(ShutdownSilo); }
public Task ProcessMessage([FromBody] DeviceMessage message) { // send the message to Orleans var deviceGrain = DeviceGrainFactory.GetGrain(message.DeviceId); return(deviceGrain.ProcessMessage(message)); }
public async Task <ActionResult> Test() { var rand = new Random(); var grain = DeviceGrainFactory.GetGrain(1); await grain.ProcessMessage(new DeviceMessage(rand.Next(-90, 90), rand.Next(-180, 180), 1, 1, DateTime.UtcNow)); return(Content("Sent")); }
public async void UpdateShouldReturnSameDevice() { //given var device = DeviceGrainFactory.GetGrain(_deviceId); //when var result = await device.UpdatePositionAndGetSurroundingDevices(30, 40); //then Assert.That(result.Any(d => AreEqual(d.Latitude, 30) && AreEqual(d.Longitude, 40))); }
public async void UpdateShouldReturnNearDevice() { //given var device1 = DeviceGrainFactory.GetGrain(_deviceId); var device2 = DeviceGrainFactory.GetGrain(Guid.NewGuid()); //when await device2.UpdatePosition(30, 40); var result = await device1.UpdatePositionAndGetSurroundingDevices(30.0001, 40); //then Assert.That(result.Any(d => AreEqual(d.Latitude, 30) && AreEqual(d.Longitude, 40))); }
private static async Task SendMessage(Model model) { // simulate the device moving model.Speed += rand.NextDouble(-0.0001, 0.0001); model.Direction += rand.NextDouble(-0.001, 0.001); var lastLat = model.Lat; var lastLon = model.Lon; UpdateDevicePosition(model); if (lastLat == model.Lat || lastLon == model.Lon) { // the device has hit the boundary, so reverse it's direction model.Speed = -model.Speed; UpdateDevicePosition(model); } // send the mesage to Orleans var device = DeviceGrainFactory.GetGrain(model.DeviceId); await device.ProcessMessage(new DeviceMessage(model.Lat, model.Lon, counter, model.DeviceId, DateTime.UtcNow)); Interlocked.Increment(ref counter); }
public Task <double> Get(int id) { var grain = DeviceGrainFactory.GetGrain(id); return(grain.GetTemperature()); }
public Task Post(int id, [FromBody] double value) { var grain = DeviceGrainFactory.GetGrain(id); return(grain.SetTemperature(value)); }
public Task Register([FromBody] Device device) { var deviceGrain = DeviceGrainFactory.GetGrain(device.DeviceId); return(deviceGrain.Register(device)); }