Beispiel #1
0
        public Task Decode(string message)
        {
            var parts = message.Split(',');
            var grain = DeviceGrainFactory.GetGrain(long.Parse(parts[0]));

            return(grain.SetTemperature(double.Parse(parts[1])));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        public Task ProcessMessage([FromBody] DeviceMessage message)
        {
            // send the message to Orleans
            var deviceGrain = DeviceGrainFactory.GetGrain(message.DeviceId);

            return(deviceGrain.ProcessMessage(message));
        }
Beispiel #4
0
        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)));
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        public Task <double> Get(int id)
        {
            var grain = DeviceGrainFactory.GetGrain(id);

            return(grain.GetTemperature());
        }
Beispiel #9
0
        public Task Post(int id, [FromBody] double value)
        {
            var grain = DeviceGrainFactory.GetGrain(id);

            return(grain.SetTemperature(value));
        }
Beispiel #10
0
        public Task Register([FromBody] Device device)
        {
            var deviceGrain = DeviceGrainFactory.GetGrain(device.DeviceId);

            return(deviceGrain.Register(device));
        }