Example #1
0
 private void btnFilterFiles_Click(object sender, EventArgs e)
 {
     Control[] controls = Controls.Find("FilterFiles", true);
     if (controls.Length < 1)
     {
         FilterFiles filterFiles = new FilterFiles(m_Model, presenter);
         ShiftUserControlDisplay(filterFiles);
     }
 }
        private void ProcessFilterFiles(object options)
        {
            if (FilterFiles.Count == 0)
            {
                return;
            }
            var socket = CanvasManager.ServerSocket.GetSocket(ServerSocketType.Count);

            CountList = new List <long[]>();
            var op   = (CountProcessOptions)options;
            var curr = op.Start;
            var end  = op.End;

            var indices = new List <long>();

            indices.Add(CanvasManager.FileManager.TimeFile.GetPacketIndex(curr));

            while (curr < end)
            {
                curr = Increment(curr, op.RenderUnit);
                if (curr > end)
                {
                    curr = end;
                }
                indices.Add(CanvasManager.FileManager.TimeFile.GetPacketIndex(curr));
            }

            var rawList  = FilterFiles.Select(filterFile => filterFile.FillBitResultsList(indices)).ToList();
            var segments = rawList[0].Count;
            var max      = rawList.SelectMany(r => r).Select(x => x.Length).Max();

            //indicate gpu to use
            socket.Send(BitConverter.GetBytes(CanvasManager.SelectedGpuIndex), sizeof(int));

            //indicate number of segments so server can allocate result memory
            socket.Send(BitConverter.GetBytes(FilterFiles.Count * segments), sizeof(int));

            //indicate max size of segments
            socket.Send(BitConverter.GetBytes(max), sizeof(int));

            for (int k = 0; k < segments; k++)
            {
                for (int j = 0; j < FilterFiles.Count; j++)
                {
                    var msg = rawList[j][k];
                    socket.Send(msg, msg.Length);
                }
            }

            var reply = socket.Receive();
            var size  = FilterFiles.Count * sizeof(long);

            for (var k = 0; k < segments; k++)
            {
                var counts = new long[FilterFiles.Count];
                Buffer.BlockCopy(reply, k * size, counts, 0, size);
                CountList.Add(counts);
            }

            CanvasManager.ServerSocket.ReturnSocket(ref socket);
        }