コード例 #1
0
ファイル: DbServerProxy.cs プロジェクト: cdy816/mars
 /// <summary>
 ///
 /// </summary>
 /// <param name="id"></param>
 /// <param name="times"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public ByteBuffer QueryHisData(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType type)
 {
     if (IsConnected)
     {
         return(mUsedHisClient.QueryHisValueAtTimes(id, times, type));
     }
     return(null);
 }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="data"></param>
        private void ProcessRequestHisDataByTimeSpanByMemory(string clientId, ByteBuffer data)
        {
            int id = data.ReadInt();

            Cdy.Tag.QueryValueMatchType type = (QueryValueMatchType)data.ReadByte();
            DateTime stime = new DateTime(data.ReadLong());
            DateTime etime = new DateTime(data.ReadLong());
            TimeSpan ts    = new TimeSpan(data.ReadLong());

            ByteBuffer re = DBRuntime.Proxy.DatabaseRunner.Manager.Proxy.QueryHisData(id, stime, etime, ts, type);

            re.UnLock();
            Parent.AsyncCallback(clientId, re);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="data"></param>
        private void ProcessRequestHisDatasByTimePointByMemory(string clientId, ByteBuffer data)
        {
            int id = data.ReadInt();

            Cdy.Tag.QueryValueMatchType type = (QueryValueMatchType)data.ReadByte();
            int             count            = data.ReadInt();
            List <DateTime> times            = new List <DateTime>();

            for (int i = 0; i < count; i++)
            {
                times.Add(new DateTime(data.ReadLong()));
            }
            ByteBuffer re = DBRuntime.Proxy.DatabaseRunner.Manager.Proxy.QueryHisData(id, times, type);

            re.UnLock();
            Parent.AsyncCallback(clientId, re);
        }
コード例 #4
0
ファイル: ApiClient.cs プロジェクト: cdy816/mars
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="times"></param>
        /// <param name="matchType"></param>
        /// <returns></returns>
        public ByteBuffer QueryHisValueAtTimes(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType matchType, int timeout = 5000)
        {
            var        vid = 0;
            ByteBuffer re  = null;

            lock (mHisDataLock)
            {
                vid = mHisRequreCount;
                mHisRequreCount++;
                CheckLogin();
            }

            var mb = GetBuffer(ApiFunConst.HisDataRequestFun, 8 + times.Count * 8 + 5 + 4);

            mb.Write(ApiFunConst.RequestHisDatasByTimePoint);
            mb.Write(this.LoginId);
            mb.Write(id);
            mb.Write((byte)matchType);
            mb.Write(times.Count);
            for (int i = 0; i < times.Count; i++)
            {
                mb.Write(times[i].Ticks);
            }
            mb.Write(vid);

            ManualResetEvent hisRequreEvent = new ManualResetEvent(false);

            hisRequreEvent.Reset();
            try
            {
                lock (mHisDataCallBack)
                {
                    mHisDataCallBack.Add(vid, (data) =>
                    {
                        re = data;
                        try
                        {
                            hisRequreEvent.Set();
                        }
                        catch
                        {
                            data?.UnlockAndReturn();
                        }
                    });
                }
                SendData(mb);
                if (hisRequreEvent.WaitOne(timeout) && re != null && re.WriteIndex - re.ReadIndex > 1)
                {
                    return(re);
                }
                else
                {
                    lock (mHisDataCallBack)
                    {
                        if (mHisDataCallBack.ContainsKey(vid))
                        {
                            mHisDataCallBack.Remove(vid);
                        }
                        else
                        {
                            return(re);
                        }
                    }
                }
                return(null);
            }
            finally
            {
                hisRequreEvent.Dispose();
            }
        }
コード例 #5
0
 /// <summary>
 /// 读取历史记录
 /// </summary>
 /// <param name="tags"></param>
 /// <param name="starttime"></param>
 /// <param name="endTime"></param>
 /// <param name="duration"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public Dictionary <string, HisDataValueCollection> ReadHisValue(List <string> tags, DateTime starttime, DateTime endTime, TimeSpan duration, Cdy.Tag.QueryValueMatchType type)
 {
     if (mHisDataClient != null && !string.IsNullOrEmpty(mLoginId))
     {
         Dictionary <string, HisDataValueCollection> re = new Dictionary <string, HisDataValueCollection>();
         var req = new HisDataRequest()
         {
             StartTime = starttime.ToBinary(), EndTime = endTime.ToBinary(), Duration = (int)duration.TotalMilliseconds, QueryType = (int)type, Token = mLoginId
         };
         req.Tags.AddRange(tags);
         var res = mHisDataClient.GetHisValue(req);
         if (res.Result)
         {
             foreach (var vv in res.Values)
             {
                 HisDataValueCollection hvd = new HisDataValueCollection()
                 {
                     ValueType = vv.ValueType
                 };
                 foreach (var vvv in vv.Values)
                 {
                     hvd.Add(new HisDataValuePoint()
                     {
                         Time = DateTime.FromBinary(vvv.Time), Value = ConvertToValue(vvv.Value, vv.ValueType)
                     });
                 }
                 re.Add(vv.Tag, hvd);
             }
         }
         return(re);
     }
     return(null);
 }
コード例 #6
0
ファイル: DbServerProxy.cs プロジェクト: cdy816/mars
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="id"></param>
        /// <param name="times"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public HisQueryResult <T> QueryHisData <T>(int id, List <DateTime> times, Cdy.Tag.QueryValueMatchType type)
        {
            if (IsConnected)
            {
                var res = mUsedHisClient.QueryHisValueAtTimes(id, times, type);
                if (res == null || res.Handles == null || res.Handles.Count == 0)
                {
                    return(null);
                }
                TagType tp = (TagType)res.ReadByte();
                switch (tp)
                {
                case Cdy.Tag.TagType.Bool:
                    return(ProcessHisResultByMemory <bool>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Byte:
                    return(ProcessHisResultByMemory <byte>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.DateTime:
                    return(ProcessHisResultByMemory <DateTime>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Double:
                    return(ProcessHisResultByMemory <double>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Float:
                    return(ProcessHisResultByMemory <float>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Int:
                    return(ProcessHisResultByMemory <int>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Long:
                    return(ProcessHisResultByMemory <long>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.Short:
                    return(ProcessHisResultByMemory <short>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.String:
                    return(ProcessHisResultByMemory <string>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.UInt:
                    return(ProcessHisResultByMemory <uint>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.ULong:
                    return(ProcessHisResultByMemory <ulong>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.UShort:
                    return(ProcessHisResultByMemory <ushort>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.IntPoint:
                    return(ProcessHisResultByMemory <int>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.UIntPoint:
                    return(ProcessHisResultByMemory <uint>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.IntPoint3:
                    return(ProcessHisResultByMemory <IntPoint3Data>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.UIntPoint3:
                    return(ProcessHisResultByMemory <UIntPoint3Data>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.LongPoint:
                    return(ProcessHisResultByMemory <LongPointData>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.ULongPoint:
                    return(ProcessHisResultByMemory <ULongPointTag>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.LongPoint3:
                    return(ProcessHisResultByMemory <LongPoint3Data>(res, tp) as HisQueryResult <T>);

                case Cdy.Tag.TagType.ULongPoint3:
                    return(ProcessHisResultByMemory <ULongPoint3Data>(res, tp) as HisQueryResult <T>);
                }
            }
            return(null);
        }
コード例 #7
0
ファイル: DbServerProxy.cs プロジェクト: cdy816/mars
 /// <summary>
 ///
 /// </summary>
 /// <param name="id"></param>
 /// <param name="stime"></param>
 /// <param name="etime"></param>
 /// <param name="span"></param>
 /// <param name="type"></param>
 /// <returns></returns>
 public ByteBuffer QueryHisData(int id, DateTime stime, DateTime etime, TimeSpan span, Cdy.Tag.QueryValueMatchType type)
 {
     if (IsConnected)
     {
         return(mUsedHisClient.QueryHisValueForTimeSpan(id, stime, etime, span, type));
     }
     return(null);
 }