コード例 #1
0
 /// <summary>
 /// Start listen events.
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public GXEventsRegisterResponse Post(GXEventsRegisterRequest request)
 {
     if (request.SessionListener.Equals(Guid.Empty) ||
         request.Instance.Equals(Guid.Empty))
     {
         throw new Exception("Listener Guid is empty.");
     }
     if (request.Actions == Actions.None && request.Targets == ActionTargets.None)
     {
         return new GXEventsRegisterResponse();
     }
     IAuthSession s = this.GetSession(false);
     long id = 0;
     bool superAdmin = false;
     Guid guid = request.DataCollectorGuid;
     //Guid is set if DC is retreaving new tasks.
     if (long.TryParse(s.Id, out id))
     {
         superAdmin = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s);
     }
     else
     {
         if (request.DataCollectorGuid.Equals(Guid.Empty))
         {
             throw new Exception("Data collector Guid is empty.");
         }
     }
     AppHost host = this.ResolveService<AppHost>();
     //Check that there are no several DCs with same Guid.
     //Note! This might happend when DC is restarted wrong.
     //For this reason we are only give a warning.
     List<GXEventsItem> events = new List<GXEventsItem>();
     if (host.IsDCRegistered(guid))
     {
         lock (Db)
         {
             GXAmiSystemError e = new GXAmiSystemError(1, ActionTargets.SystemError, Actions.State, new Exception("Data collector already exists."));
             Db.Insert<GXAmiSystemError>(e);
             events.Add(new GXEventsItem(ActionTargets.SystemError, Actions.Add, e));
         }
     }
     ulong mask = (ulong)(((int)request.Targets << 16) | (int)request.Actions);
     GXEvent e1 = new GXEvent(id, superAdmin, guid, request.Instance, mask);
     host.AddEvent(request.SessionListener, e1);
     if (guid != Guid.Empty)
     {
         //Notify that DC is connected.
         lock (Db)
         {
             GXAmiDataCollector dc = Db.Select<GXAmiDataCollector>(q => q.Guid == guid)[0];
             dc.State = Gurux.Device.DeviceStates.Connected;
             Db.UpdateOnly(dc, p => p.StatesAsInt, p => p.Id == dc.Id);
             events.Add(new GXEventsItem(ActionTargets.DataCollector, Actions.State, dc));
         }
         host.SetEvents(Db, this.Request, 0, events);
     }
     return new GXEventsRegisterResponse();
 }
コード例 #2
0
        /// <summary>
        /// Start listen events.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXEventsRegisterResponse Post(GXEventsRegisterRequest request)
        {
            if (request.SessionListener.Equals(Guid.Empty) ||
                request.Instance.Equals(Guid.Empty))
            {
                throw new Exception("Listener Guid is empty.");
            }
            if (request.Actions == Actions.None && request.Targets == ActionTargets.None)
            {
                return(new GXEventsRegisterResponse());
            }
            IAuthSession s          = this.GetSession(false);
            long         id         = 0;
            bool         superAdmin = false;
            Guid         guid       = request.DataCollectorGuid;

            //Guid is set if DC is retreaving new tasks.
            if (long.TryParse(s.Id, out id))
            {
                superAdmin = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s);
            }
            else
            {
                if (request.DataCollectorGuid.Equals(Guid.Empty))
                {
                    throw new Exception("Data collector Guid is empty.");
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            //Check that there are no several DCs with same Guid.
            //Note! This might happend when DC is restarted wrong.
            //For this reason we are only give a warning.
            List <GXEventsItem> events = new List <GXEventsItem>();

            if (host.IsDCRegistered(guid))
            {
                lock (Db)
                {
                    GXAmiSystemError e = new GXAmiSystemError(1, ActionTargets.SystemError, Actions.State, new Exception("Data collector already exists."));
                    Db.Insert <GXAmiSystemError>(e);
                    events.Add(new GXEventsItem(ActionTargets.SystemError, Actions.Add, e));
                }
            }
            ulong   mask = (ulong)(((int)request.Targets << 16) | (int)request.Actions);
            GXEvent e1   = new GXEvent(id, superAdmin, guid, request.Instance, mask);

            host.AddEvent(request.SessionListener, e1);
            if (guid != Guid.Empty)
            {
                //Notify that DC is connected.
                lock (Db)
                {
                    GXAmiDataCollector dc = Db.Select <GXAmiDataCollector>(q => q.Guid == guid)[0];
                    dc.State = Gurux.Device.DeviceStates.Connected;
                    Db.UpdateOnly(dc, p => p.StatesAsInt, p => p.Id == dc.Id);
                    events.Add(new GXEventsItem(ActionTargets.DataCollector, Actions.State, dc));
                }
                host.SetEvents(Db, this.Request, 0, events);
            }
            return(new GXEventsRegisterResponse());
        }