예제 #1
0
        /// <summary>
        /// Gets the events.
        /// </summary>
        protected void GetEvents(ConnectedClient client, DataPacket request)
        {
            byte[]     buffer       = request.Buffer;
            int        index        = ArgumentIndex;
            TimeRange  timeRange    = GetTimeRange(buffer, ref index);
            long       dataFilterID = GetInt64(buffer, ref index);
            DataFilter dataFilter   = null;

            if (dataFilterID > 0)
            {
                dataFilter = serverCache.DataFilterCache.Get(dataFilterID);

                if (dataFilter == null)
                {
                    dataFilterID = 0;
                }
            }
            else
            {
                bool useCache = GetBool(buffer, ref index);
                dataFilter = GetDataFilter(typeof(Event), buffer, ref index);

                if (useCache)
                {
                    dataFilterID = serverCache.GetNextID();
                    serverCache.DataFilterCache.Add(dataFilterID, dataFilter);
                }
            }

            int archiveBit = GetByte(buffer, ref index);

            List <Event> events = dataFilter == null ?
                                  new List <Event>() :
                                  archiveHolder.GetEvents(timeRange, dataFilter, archiveBit);
            int totalEventCount = events.Count;
            int blockCount      = totalEventCount > 0 ? (int)Math.Ceiling((double)totalEventCount / EventBlockCapacity) : 1;
            int eventIndex      = 0;

            buffer = client.OutBuf;

            for (int blockNumber = 1; blockNumber <= blockCount; blockNumber++)
            {
                ResponsePacket response = new ResponsePacket(request, buffer);
                index = ArgumentIndex;
                CopyInt32(blockNumber, buffer, ref index);
                CopyInt32(blockCount, buffer, ref index);
                CopyInt64(dataFilterID, buffer, ref index);
                CopyInt32(totalEventCount, buffer, ref index);

                int eventCount = Math.Min(totalEventCount - eventIndex, EventBlockCapacity); // events in this block
                CopyInt32(eventCount, buffer, ref index);

                for (int i = 0; i < eventCount; i++)
                {
                    CopyEvent(events[eventIndex], buffer, ref index);
                    eventIndex++;
                }

                response.BufferLength = index;
                client.SendResponse(response);
            }
        }
예제 #2
0
 /// <summary>
 /// Gets the events.
 /// </summary>
 public List <Event> GetEvents(TimeRange timeRange, DataFilter filter, int archiveBit)
 {
     return(archiveHolder.GetEvents(timeRange, filter, archiveBit));
 }
예제 #3
0
 /// <summary>
 /// Gets the events.
 /// </summary>
 public List <Event> GetEvents(int archiveBit, TimeRange timeRange, DataFilter filter)
 {
     return(archiveHolder.GetEvents(archiveBit, timeRange, filter));
 }