public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            using (var dbContext = new LynexDbContext())
            {
                var site = dbContext.Set <Site>().Find(SiteId);

                if (site != null)
                {
                    var switches = new List <SimplifiedSwitchModel>();
                    foreach (var @switch in site.Switches.OrderBy(q => q.Order))
                    {
                        var switchModel = new SimplifiedSwitchModel(@switch);
                        foreach (var schedule in @switch.Schedules)
                        {
                            switchModel.ScheduleViewModels.Add(new ScheduleViewModel(schedule));
                        }

                        switches.Add(switchModel);
                    }
                    model.Message       = switches;
                    model.BroadcastType = WebSocketBroadcastType.All;
                }
                else
                {
                    model.Type          = WebSocketMessageType.Error;
                    model.Message       = "Site does not exist";
                    model.BroadcastType = WebSocketBroadcastType.Pi;
                }
            }

            return(model);
        }
Example #2
0
        protected override string ProcessMessage(SiteStatusModel model)
        {
            var result = new WebSocketResultViewModel();

            using (var dbContext = new LynexDbContext())
            {
                var site = dbContext.Set <Site>().Find(SiteId);

                if (site != null)
                {
                    result.StatusCode = 110;
                    result.Message    = "Success";
                    var switches = new List <SimplifiedSwitchModel>();
                    foreach (var @switch in site.Switches.OrderBy(q => q.Order))
                    {
                        switches.Add(new SimplifiedSwitchModel(@switch));
                    }
                    result.Result = switches;
                }
                else
                {
                    result.StatusCode = 500;
                    result.Message    = "Site does not exist";
                }
            }


            return(JsonConvert.SerializeObject(result));
        }
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            if (model.Message != null)
            {
                using (var dbContext = new LynexDbContext())
                {
                    foreach (var switchModel in model.Message)
                    {
                        var @switch = dbContext.Set <Switch>().Find(switchModel.Id.ToString());
                        if (@switch != null)
                        {
                            @switch.Live = (bool)switchModel.Live;
                            dbContext.Entry(@switch).State = EntityState.Modified;
                            dbContext.Set <Switch>().Attach(@switch);
                            dbContext.Entry(@switch).Property("Live").IsModified = true;
                            model.BroadcastType = WebSocketBroadcastType.Web;
                        }
                    }

                    dbContext.SaveChanges();
                    model.BroadcastType = WebSocketBroadcastType.Web;
                }
            }
            else
            {
                model.Type          = WebSocketMessageType.Error;
                model.Message       = "Live switches is null";
                model.BroadcastType = WebSocketBroadcastType.Pi;
            }

            return(model);
        }
        protected override string ProcessMessage(SwitchUpdatedModel model)
        {
            var result = new WebSocketResultViewModel();

            if (model.ChipId != null)
            {
                using (var dbContext = new LynexDbContext())
                {
                    var site = dbContext.Set <Site>().Find(SiteId);

                    if (site != null)
                    {
                        var items =
                            dbContext.Set <SwitchEvent>()
                            .Where(
                                q =>
                                q.SiteId == site.Id && q.Switch.ChipId == model.ChipId &&
                                q.Status == model.Status).ToList();

                        dbContext.Set <SwitchEvent>().RemoveRange(items);

                        var @switch = dbContext
                                      .Set <Switch>().FirstOrDefault(q => q.ChipId == model.ChipId && q.SiteId == site.Id);

                        if (@switch != null)
                        {
                            @switch.Status = model.Status;
                            dbContext.Entry(@switch).State = EntityState.Modified;
                            dbContext.Set <Switch>().Attach(@switch);

                            dbContext.Entry(@switch).Property("Status").IsModified = true;
                            result.Message    = "Success";
                            result.StatusCode = 200;
                            result.Result     = new SimplifiedSwitchModel(@switch);
                            dbContext.SaveChanges();
                        }
                        else
                        {
                            result.StatusCode = 500;
                            result.Message    = "Switch does not exist";
                        }
                    }
                    else
                    {
                        result.StatusCode = 500;
                        result.Message    = "Site does not exist";
                    }
                }
            }
            else
            {
                result.StatusCode = 600;
                result.Message    = "Invalid Request";
            }


            return(JsonConvert.SerializeObject(result));
        }
Example #5
0
        protected override string ProcessMessage(PiAuthenticationModel model)
        {
            var result = new WebSocketResultViewModel();

            if (model.SiteId == null || model.AuthType == null || model.RequestType == null || model.Rnd == null)
            {
                result.StatusCode = 600;
                result.Message    = "Invalid Request";
            }
            else if (model.RequestType != "auth")
            {
                result.StatusCode = 601;
                result.Message    = "Not authenticated yet";
            }
            else
            {
                using (var dbContext = new LynexDbContext())
                {
                    var site = dbContext.Set <Site>().Find(model.SiteId);
                    if (site != null)
                    {
                        var queryStr = "authType=" + model.AuthType + "&requestType=" + model.RequestType + "&rnd=" + model.Rnd + "&siteId=" + model.SiteId + "&key=" + site.Secret;
                        if (model.AuthType == "md5")
                        {
                            var calculatedMd5 = queryStr.GetMD5();
                            if (string.Equals(model.Code, calculatedMd5, StringComparison.CurrentCultureIgnoreCase))
                            {
                                IsAuthenticated   = true;
                                result.StatusCode = 101;
                                result.Message    = "Success";
                            }
                            else
                            {
                                result.StatusCode = 300;
                                result.Message    = "Authentication Failed";
                            }
                        }
                        else
                        {
                            result.StatusCode = 400;
                            result.Message    = "Unsupported authentication";
                        }
                    }
                    else
                    {
                        result.StatusCode = 500;
                        result.Message    = "Site does not exist";
                    }
                }
            }



            return(JsonConvert.SerializeObject(result));
        }
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            if (model.Message.SiteId == null || model.Message.AuthType == null || model.Message.RequestType == null || model.Message.Rnd == null)
            {
                model.Type    = WebSocketMessageType.Error;
                model.Message = "Invalid Request";
            }
            else if (model.Message.RequestType.ToString() != "auth")
            {
                model.Type    = WebSocketMessageType.Error;
                model.Message = "Not authenticated yet";
            }
            else
            {
                using (var dbContext = new LynexDbContext())
                {
                    string siteId = model.Message.SiteId.ToString();
                    var    site   = dbContext.Set <Site>().Find(siteId);
                    if (site != null)
                    {
                        string queryStr = "authType=" + model.Message.AuthType + "&requestType=" + model.Message.RequestType + "&rnd=" + model.Message.Rnd + "&siteId=" + model.Message.SiteId + "&key=" + site.Secret;
                        if (model.Message.AuthType.ToString() == "md5")
                        {
                            var calculatedMd5 = queryStr.GetMD5();
                            if (string.Equals(model.Message.Code.ToString(), calculatedMd5, StringComparison.CurrentCultureIgnoreCase))
                            {
                                IsAuthenticated = true;
                                model.Type      = WebSocketMessageType.PiAuthentication;
                                model.Message   = "Success";
                            }
                            else
                            {
                                model.Type    = WebSocketMessageType.Error;
                                model.Message = "Authentication Failed";
                            }
                        }
                        else
                        {
                            model.Type    = WebSocketMessageType.Error;
                            model.Message = "Unsupported authentication";
                        }
                    }
                    else
                    {
                        model.Type    = WebSocketMessageType.Error;
                        model.Message = "Site does not exist";
                    }
                }
            }



            return(model);
        }
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            var updatingModel = model.Message;

            using (var dbContext = new LynexDbContext())
            {
                var switchRepository = new SwtichRepository(dbContext);

                switchRepository.UpdateOrder(_userId, updatingModel.id.ToString(), (int)updatingModel.order);
            }
            model.BroadcastType = WebSocketBroadcastType.All;
            return(model);
        }
Example #8
0
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            var updatingSwitch = model.Message;

            using (var dbcontext = new LynexDbContext())
            {
                var @switch = dbcontext.Set <Switch>().Find(updatingSwitch.id.ToString());

                if (@switch != null)
                {
                    @switch.Status = (bool)updatingSwitch.status;

                    dbcontext.Entry(@switch).State = EntityState.Modified;
                    dbcontext.Set <Switch>().Attach(@switch);
                    dbcontext.Entry(@switch).Property("Status").IsModified = true;
                    dbcontext.SaveChanges();
                    model.BroadcastType = WebSocketBroadcastType.All;
                }
            }

            return(model);
        }
Example #9
0
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            if (model.Message.SwitchId != null)
            {
                using (var dbContext = new LynexDbContext())
                {
                    var @switch = dbContext.Set <Switch>().Find(model.Message.SwitchId.ToString());

                    if (@switch != null)
                    {
                        @switch.Live = (bool)model.Message.Live;
                        dbContext.Entry(@switch).State = EntityState.Modified;
                        dbContext.Set <Switch>().Attach(@switch);
                        dbContext.Entry(@switch).Property("Live").IsModified = true;
                        dbContext.SaveChanges();

                        model.BroadcastType = WebSocketBroadcastType.Web;
                    }
                    else
                    {
                        model.Type          = WebSocketMessageType.Error;
                        model.Message       = "Can not find Switch Id " + model.Message.SwitchId;
                        model.BroadcastType = WebSocketBroadcastType.Pi;
                    }
                }
            }
            else
            {
                model.Type          = WebSocketMessageType.Error;
                model.Message       = "Switch id cannot be null";
                model.BroadcastType = WebSocketBroadcastType.Pi;
            }



            return(model);
        }
        private async Task ProcessWSMessage(AspNetWebSocketContext context)
        {
            var socket = context.WebSocket;


            while (true)
            {
                var buffer = new ArraySegment <byte>(new byte[1024]);
                var result = await socket.ReceiveAsync(
                    buffer, CancellationToken.None);

                if (socket.State == WebSocketState.Open)
                {
                    var userMessage = Encoding.UTF8.GetString(
                        buffer.Array, 0, result.Count);

                    try
                    {
                        var model = JsonConvert.DeserializeObject <SwitchEnquireModel>(userMessage);

                        using (var dbContext = new LynexDbContext())
                        {
                            var site = await dbContext.Set <Site>().FindAsync(model.SiteId);

                            var decryptedSerialNumber = _cryptoService.Decrypt(model.EncryptedSerialNumber, site.Secret);

                            if (decryptedSerialNumber == site.SerialNumber)
                            {
                                var siteModel = new SimplifiedSiteModel(site);

                                foreach (var @switch in site.Switches)
                                {
                                    siteModel.SwitchViewModels.Add(new SimplifiedSwitchModel(@switch));
                                }

                                userMessage = JsonConvert.SerializeObject(siteModel);
                            }
                            else
                            {
                                userMessage = "Serial Number does not match";
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        userMessage = "Does not support";
                    }



                    buffer = new ArraySegment <byte>(
                        Encoding.UTF8.GetBytes(userMessage));
                    await socket.SendAsync(
                        buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else
                {
                    break;
                }
            }
        }
        public override WebSocketMessage ProcessMessage(WebSocketMessage model)
        {
            if (model.Message.ChipId != null)
            {
                using (var dbContext = new LynexDbContext())
                {
                    var site = dbContext.Set<Site>().Find(SiteId);

                    if (site != null)
                    {
                        var status = (bool)model.Message.Status;
                        string chipId = model.Message.ChipId.ToString();

                        var items =
                            dbContext.Set<SwitchEvent>()
                                .Where(
                                    q =>
                                        q.SiteId == site.Id && q.Switch.ChipId == chipId &&
                                        q.Status == status).ToList();

                        dbContext.Set<SwitchEvent>().RemoveRange(items);

                        var @switch = dbContext
                            .Set<Switch>().FirstOrDefault(q => q.ChipId == chipId && q.SiteId == site.Id);

                        if (@switch != null)
                        {
                            @switch.Status = status;
                            dbContext.Entry(@switch).State = EntityState.Modified;
                            dbContext.Set<Switch>().Attach(@switch);

                            dbContext.Entry(@switch).Property("Status").IsModified = true;
                            model.Message = new SimplifiedSwitchModel(@switch);
                            model.BroadcastType = WebSocketBroadcastType.All;
                            dbContext.SaveChanges();
                        }
                        else
                        {
                            model.Type = WebSocketMessageType.Error;
                            model.BroadcastType = WebSocketBroadcastType.Pi;
                            model.Message = "Switch does not exist";
                        }
                        
                    }
                    else
                    {
                        model.Type = WebSocketMessageType.Error;
                        model.BroadcastType = WebSocketBroadcastType.Pi;
                        model.Message = "Site does not exist";
                    }
                }
            }
            else
            {
                model.Type = WebSocketMessageType.Error;
                model.BroadcastType = WebSocketBroadcastType.Pi;
                model.Message = "Invalid Request";
            }


            return model;
        }