public void OnLoad(MMF.Sprite.D2DSpriteBatch batch)
        {
            GameContext.InitializePlayerDescriptions(batch);
            _geometry = new PathGeometry(GameContext.RenderContext.D2DFactory);
            GeometrySink geometrySink = _geometry.Open();
            geometrySink.SetFillMode(FillMode.Winding);
            geometrySink.BeginFigure(new Point(50, 580), FigureBegin.Filled);
            geometrySink.AddLine(new Point(20, 600));
            geometrySink.AddLine(new Point(50, 620));
            geometrySink.EndFigure(FigureEnd.Closed);
            geometrySink.Close();

            _geometry_2 = new PathGeometry(GameContext.RenderContext.D2DFactory);
            GeometrySink geometrySink_2 = _geometry_2.Open();
            geometrySink_2.SetFillMode(FillMode.Winding);
            geometrySink_2.BeginFigure(new Point(520, 580), FigureBegin.Filled);
            geometrySink_2.AddLine(new Point(550, 600));
            geometrySink_2.AddLine(new Point(520, 620));
            geometrySink_2.EndFigure(FigureEnd.Closed);
            geometrySink_2.Close();

            col_1 = batch.CreateSolidColorBrush(Color.FromArgb(255, 255, 255, 255));
            col_2 = batch.CreateSolidColorBrush(Color.FromArgb(120, 255, 0, 0));
            col_3 = batch.CreateSolidColorBrush(Color.FromArgb(120, 0, 0, 255));
            col_4 = batch.CreateSolidColorBrush(Color.FromArgb(120, 0, 255, 0));
            col_5 = batch.CreateSolidColorBrush(Color.FromArgb(120, 0, 0, 0));

            //  bitmap = batch.CreateBitmap(@playerDescriptions[currentIndex].image);
            format_1 = batch.CreateTextformat("Meiryo UI", 60);
            format_2 = batch.CreateTextformat("Meiryo UI", 100);
            isInitialized = true;
        }
Example #2
0
 public void Dispose()
 {
     if (MMF != null)
     {
         MMF.Dispose();
     }
 }
Example #3
0
        public SharedMessageQueue(string file)
        {
            File = file;

            if (System.IO.File.Exists(File))
            {
                Log("Opening Queue File");
                MMF      = MemoryMappedFile.CreateFromFile(File, FileMode.Open, "communicator", MaxSize);
                Accessor = MMF.CreateViewAccessor(0, ReservedSize);
                Log("Opened Queue File");
            }
            else
            {
                Log("Creating Queue File");
                MMF      = MemoryMappedFile.CreateFromFile(File, FileMode.Create, "communicator", MaxSize);
                Accessor = MMF.CreateViewAccessor(0, ReservedSize);
                Front    = ReservedSize;
                Rear     = ReservedSize;
                IsEmpty  = true;
                IsFull   = false;
                Log("Created Queue File");
            }

            Log("Front:{0}, Rear:{1}", Front, Rear);
        }
Example #4
0
 static void ImageLoader()
 {
     byte[] receivedImage;
     receivedImageFile = new MMF();
     receivedImageFile.OpenExisting(mmfSourceFileName);
     receivedImage         = Convert.FromBase64String(receivedImageFile.ReadContent(MMF.DataType.DataString));
     Program.receivedImage = new Image <Bgra, byte>(new Bitmap(new MemoryStream(receivedImage)));
 }
Example #5
0
        public bool Enqueue(int level, string msg)
        {
            var c    = Encoding.UTF8.GetBytes(msg);
            var data = new byte[c.Length + HeaderSize];
            var s    = new MemoryStream(data);

            using (var sw = new BinaryWriter(s))
            {
                sw.Write(level);              // 4
                sw.Write(DateTime.Now.Ticks); // 8
                sw.Write(c.Length);           // 4
                sw.Write(c);
            }

            using (var stream = MMF.CreateViewStream())
            {
                stream.Position = Front;
                if (IsFull)
                {
                    // No space
                    Log("No space for writing data");
                    return(false);
                }
                else
                {
                    if (Front + data.Length < stream.Length)
                    {
                        // Enough space to go
                        stream.Write(data, 0, data.Length);
                        Front = stream.Position;
                        Log("Enough space, enqueue data");
                    }
                    else
                    {
                        // No enough space, break into two parts
                        var firstLen  = (int)(stream.Length - Front);
                        var secondLen = data.Length - firstLen;
                        stream.Write(data, 0, firstLen);
                        stream.Position = ReservedSize; // reset to begin
                        stream.Write(data, firstLen - 1, secondLen);
                        Front = stream.Position;
                        Log("Split data and enqueue");
                    }

                    IsEmpty = false;
                }

                // 1. Front is catching up Rear in next cycle
                // 2. Front is near the end of the stream, and remaining data in the head is not enough
                if ((Rear > Front && Rear - Front < HeaderSize) || (stream.Length - Front - 1 + (Rear - ReservedSize)) < HeaderSize)
                {
                    IsFull = true;
                }

                Log("Front:{0}, Rear:{1}", Front, Rear);
                return(true);
            }
        }
 static void ImageLoader()
 {
     imageFile = new MMF();
     imageFile.OpenExisting(mmfFileName);
     using (var ms = new MemoryStream(Convert.FromBase64String(imageFile.ReadContent(MMF.DataType.DataString))))
     {
         receivedImage = new Image <Bgra, byte>(new Bitmap(ms));
     }
 }
Example #7
0
        void Kursor3DTestThread()
        {
            // TODO: Implement actAsModelerModule
            ThreadHelperClass.SetText(this, lblStatusValue, "Thread started. Loading images from selected folder to memory...");

            ThreadHelperClass.SetText(this, lblStatusValue, "Thread started. Loading images from selected folder to memory...");

            #region Test image loader
            Bitmap[] sourceImage;
            string[] Files = Directory.GetFiles(cursor3DSourceImage, "*.png");
            sourceImage = new Bitmap[Files.Length];
            for (int fileNumber = 0; fileNumber < Files.Length; fileNumber++)
            {
                sourceImage[fileNumber] = new Bitmap(Files[fileNumber]);
            }
            #endregion Test image loader

            ThreadHelperClass.SetText(this, lblStatusValue, "Images loaded. " + Files.Length + " files were added to memory");

            bool isExitRequested = false;
            MMF  mappedFile      = new MMF();
            mappedFile.CreateNewFile("Kursor3DSourceImage", 10000000);
            int position = 0;

            do
            {
                Stopwatch overalPerformance = new Stopwatch();
                overalPerformance.Start();

                // Create preview of loaded image
                ThreadHelperClass.SetImage(this, picImagePreview, sourceImage[position]);
                ThreadHelperClass.SetText(this, lblStatusValue, "Now previewing image: " + Files[position]);
                position++;
                if (position == Files.Length)
                {
                    position = 0;
                }

                #region Receiver threat
                receiverThread = new Thread(ResultReceiver);
                receiverThread.Start();
                #endregion Receiver threat

                ThreadHelperClass.SetText(this, lblStatusValue, "Writing image to memory-mapped file");

                // Convert image to array and save to tempImage
                Stopwatch imageConversionWatcher = new Stopwatch();
                imageConversionWatcher.Start();

                #region Image converter
                byte[] tempImage;
                using (var ms = new MemoryStream())
                {
                    sourceImage[position].Save(ms, sourceImage[position].RawFormat);
                    tempImage = ms.ToArray();
                }
                #endregion Image converter

                imageConversionWatcher.Stop();
                ThreadHelperClass.SetText(this, lblImageConversionPerformaceValue, imageConversionWatcher.ElapsedMilliseconds.ToString() + "ms");

                Stopwatch MMFWatcher = new Stopwatch();
                MMFWatcher.Start();
                // Write the image to memory-mapped file
                mappedFile.AddInformation(Convert.ToBase64String(tempImage));
                MMFWatcher.Stop();
                ThreadHelperClass.SetText(this, lblMMFPerformanceValue, MMFWatcher.ElapsedMilliseconds.ToString() + "ms");

                ThreadHelperClass.SetText(this, lblStatusValue, "File writen. Sending notification to Cursor 3D");

                // Notify Kursor3D Module about the image
                SendReport("Kursor3DImageNotifier");

                ThreadHelperClass.SetText(this, lblStatusValue, "Module connected. Now waiting for the module to complete the process");

                // Wait for receiver thread to complete
                if (receiverThread.IsAlive)
                {
                    receiverThread.Join();
                }
                receiverThread = null;
                #region UI setter
                ThreadHelperClass.SetText(this, lblStatusValue, "Module has finished the work. Writing the received values");
                ThreadHelperClass.SetText(this, lblXPositionValue, x.ToString());
                ThreadHelperClass.SetText(this, lblYPositionValue, y.ToString());
                ThreadHelperClass.SetText(this, lblZPositionValue, z.ToString());
                ThreadHelperClass.SetText(this, lblGestureTypeValue, gestureType);
                overalPerformance.Stop();
                ThreadHelperClass.SetText(this, lblOveralPerformanceValue, overalPerformance.ElapsedMilliseconds.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblKursor3DOverallPerformanceValue, kursor3DOverallPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblKursor3DFindHandThreadPerformanceValue, kursor3DFindHandPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblKursor3DFindDepthThreadPerformanceValue, kursor3DFindDepthPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblKursor3DGestureRecognitionThreadPerformanceValue, kursor3DgestureRecognitionPerformance.ToString() + "ms");
                #endregion UI setter
            } while (!isExitRequested);
        }
Example #8
0
 static void ImageWriter()
 {
     sentImageFile = new MMF();
     sentImageFile.CreateNewFile(mmfProcessedFileName, 10000000);
     sentImageFile.AddInformation(Convert.ToBase64String(processedImage.Bytes));
 }
        public void RenderSprite(MMF.Sprite.D2DSpriteBatch batch)
        {
            if (PlayerContext.HandOperationChecker != null && PlayerContext.HandOperationChecker.isAcceptButtonPressed())
            {
                return;
            }
            var playerDescriptions = GameContext.playerDescriptions;
            //    batch.DWRenderTarget.FillRectangle(col_1, batch.FillRectangle);
            batch.DWRenderTarget.FillRectangle(col_2, new Rectangle(0, 0, 1000, 250));//キャラクターボックス
            batch.DWRenderTarget.DrawText("CHARACTER", format_1, new Rectangle(60, 10, 700, 100), col_1);
            batch.DWRenderTarget.DrawText(playerDescriptions[currentIndex].charactorName, format_2, new Rectangle(250, 100, 1000, 100), col_1);
            batch.DWRenderTarget.DrawBitmap(playerDescriptions[currentIndex].image, new Rectangle(60, 350, 450, 450));
            batch.DWRenderTarget.FillGeometry(_geometry, col_1);
            batch.DWRenderTarget.FillGeometry(_geometry_2, col_1);

            int skbox_x = 560, skbox_y = 300;
            int skbox_w = 1000 - skbox_x, skbox_h = 900 - skbox_y;
            batch.DWRenderTarget.FillRectangle(col_3, new Rectangle(skbox_x, skbox_y, skbox_w, skbox_h));//スキルボックス
            batch.DWRenderTarget.DrawText("SKIL", format_1, new Rectangle(skbox_x + 100, skbox_y, 500, 100), col_1);
            batch.DWRenderTarget.DrawText("A:", format_1, new Rectangle(skbox_x + 20, skbox_y + 150, 500, 100), col_1);
            batch.DWRenderTarget.DrawText("B:", format_1, new Rectangle(skbox_x + 20, skbox_y + 300, 500, 100), col_1);
            batch.DWRenderTarget.DrawText("C:", format_1, new Rectangle(skbox_x + 20, skbox_y + 450, 400, 100), col_1);
            batch.DWRenderTarget.DrawText(playerDescriptions[currentIndex].skillName_1, format_1, new Rectangle(skbox_x + 120, skbox_y + 150, 500, 100), col_1);
            batch.DWRenderTarget.DrawText(playerDescriptions[currentIndex].skillName_2, format_1, new Rectangle(skbox_x + 120, skbox_y + 300, 500, 100), col_1);
            batch.DWRenderTarget.DrawText(playerDescriptions[currentIndex].skillName_3, format_1, new Rectangle(skbox_x + 120, skbox_y + 450, 500, 100), col_1);
        }
Example #10
0
        private void readCalcResultAsync(IntPtr Chandle, int dataSize)
        {
            //-1代表子进程写入共享内存失败
            if (dataSize == -1)
            {
                Console.WriteLine(string.Format("Write mmf {0} failed", Chandle));
                System.Environment.Exit(2);
            }
            //0代表当前共享内存中不存在数据,则直接返回,且让++this.procDoneNum
            if (dataSize == 0)
            {
                Console.WriteLine(string.Format("当前批{0}没有数据", Chandle));
                if (++this.procDoneNum == this.processNum)
                {
                    Task.Run(() => {
                        writeResToDb();
                    });
                }
                return;
            }

            DateTime t1, t2;

            t1 = DateTime.Now;
            Console.WriteLine(string.Format("read params :child handle = {0}, data size = {1}", Chandle, dataSize));

            string shareName = this.getMMFName(Chandle);

            Console.WriteLine(string.Format("read child outcome :{0}", shareName));
            IntPtr mmf = IntPtr.Zero;

            try
            {
                mmf = MMF.OpenFileMapping(MMF.FileMapAccess.FileMapRead, false, shareName);
                Console.WriteLine("open file ...");
            }
            catch (Exception e)
            {
                //MessageBox.Show(string.Format("open mmf {0} failed, error : {1}", shareName, e.Message));
                Console.WriteLine(string.Format("open mmf {0} failed, error : {1}", shareName, e.Message));
                System.Environment.Exit(2);
            }
            if (IntPtr.Zero == mmf)
            {
                //MessageBox.Show(string.Format("共享内存<{0}>打开失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                Console.WriteLine(string.Format("共享内存<{0}>打开失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                System.Environment.Exit(2);
                return;
            }
            IntPtr reader = IntPtr.Zero;

            try
            {
                reader = MMF.MapViewOfFile(mmf, MMF.FileMapAccess.FileMapRead, 0, 0, (uint)dataSize);
                Console.WriteLine("map view ...");
            }
            catch (Exception e)
            {
                Console.WriteLine("map view failed");
                System.Environment.Exit(2);
                return;
            }
            if (reader == IntPtr.Zero)
            {
                //MessageBox.Show(string.Format("共享内存<{0}>映射失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                Console.WriteLine(string.Format("共享内存<{0}>映射失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                System.Environment.Exit(2);
                return;
            }

            IntPtr tp    = IntPtr.Zero;
            Type   type  = typeof(MMFGSStruct);
            int    ssize = Marshal.SizeOf(type);

            Console.WriteLine("ssize = " + ssize);

            //tp = new IntPtr(reader.ToInt64());
            MMFGSStruct data = new MMFGSStruct();
            long        sp   = reader.ToInt64();

            for (int dsize = 0; dsize < dataSize; dsize += ssize)
            {
                try
                {
                    tp   = new IntPtr(sp + dsize);
                    data = (MMFGSStruct)Marshal.PtrToStructure(tp, typeof(MMFGSStruct));

                    // convertFromMMFGSStruct 将共享内存传递的计算结果转换为GridStrength
                    this.MultiTasksGridStrengths.Add(convertFromMMFGSStruct(data));
                }
                catch (Exception e)
                {
                    Console.WriteLine(string.Format("read error : tp = {0}, dsize = {1}, msg = {2}", tp.ToInt64(), dsize, e.Message));
                    System.Environment.Exit(2);
                    //MessageBox.Show(string.Format("read error : tp = {0}, dsize = {1}, msg = {2}", tp.ToInt32(), dsize, e.Message));
                }
            }
            Console.WriteLine("after read....");
            MMF.UnmapViewOfFile(reader);
            MMF.CloseHandle(mmf);
            mmf = reader = IntPtr.Zero;
            t2  = DateTime.Now;
            Console.WriteLine(string.Format("read {0} done. now total : {1}, using time: {2}", shareName, this.MultiTasksGridStrengths.Count, (t2 - t1).TotalMilliseconds));
            Console.WriteLine("**********************************************************************");
            this.procDoneNum++;
            Console.WriteLine(String.Format("已处理{0}/{1}个进程", this.procDoneNum, this.processNum));
            Console.WriteLine("**********************************************************************");
            //this.outGSs();

            //if (++this.procDoneNum == Math.Min(this.maxProcNum, this.processNum - this.procDoneNum1))
            if (this.procDoneNum == this.processNum)
            {
                Task.Run(() => {
                    writeResToDb();
                });
                RedisMq.Pub("rayTrace_finish", this.cellInfo.eNodeB);
            }
        }
Example #11
0
        // 2019.5.22
        private void readReRayResult(IntPtr Chandle, int dataSize)
        {
            //-1代表子进程写入共享内存失败
            if (dataSize == -1)
            {
                Console.WriteLine(string.Format("Write mmf {0} failed", Chandle));
                errorExit();
            }
            if (dataSize == 0)
            {
                Console.WriteLine(string.Format("当前批{0}没有数据", Chandle));
                //将写入数据库操作剥离
                if (++this.procDoneNum1 == this.processNum)
                {
                    writeReRayToDb();
                }
                return;
            }

            string shareName = this.getMMFName(Chandle) + "_ReRay";

            IntPtr mmf = IntPtr.Zero;

            try
            {
                mmf = MMF.OpenFileMapping(MMF.FileMapAccess.FileMapRead, false, shareName);
            }
            catch (Exception e)
            {
                Console.WriteLine(string.Format("open mmf {0} failed, error : {1}", shareName, e.Message));
                errorExit();
            }
            if (IntPtr.Zero == mmf)
            {
                Console.WriteLine(string.Format("共享内存<{0}>打开失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                errorExit();
            }
            //共享内存打开成功通知
            Console.WriteLine(string.Format("read reRay................. open mmf {0} success", shareName));

            IntPtr reader = IntPtr.Zero;

            try
            {
                reader = MMF.MapViewOfFile(mmf, MMF.FileMapAccess.FileMapRead, 0, 0, (uint)dataSize);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                errorExit();
            }
            if (reader == IntPtr.Zero)
            {
                Console.WriteLine(string.Format("共享内存<{0}>映射失败,错误信息编号:{1}", shareName, MMF.GetLastError()));
                errorExit();
            }

            IntPtr tp    = IntPtr.Zero;
            Type   type  = typeof(MMFReRayStruct);
            int    ssize = Marshal.SizeOf(type);

            tp = new IntPtr(reader.ToInt64());
            MMFReRayStruct data = new MMFReRayStruct();
            long           sp   = reader.ToInt64();

            for (int dsize = 0; dsize < dataSize; dsize += ssize)
            {
                try
                {
                    tp   = new IntPtr(sp + dsize);
                    data = (MMFReRayStruct)Marshal.PtrToStructure(tp, typeof(MMFReRayStruct));
                    this.MultiTasksReRay.Add(data);
                }
                catch (Exception e)
                {
                    Console.WriteLine(string.Format("read error : tp = {0}, dsize = {1}, msg = {2}", tp.ToInt64(), dsize, e.Message));
                }
            }
            MMF.UnmapViewOfFile(reader);
            MMF.CloseHandle(mmf);
            mmf = reader = IntPtr.Zero;

            //共享内存打开成功通知
            Console.WriteLine(string.Format("add reRay to MultiTasksReRay success..................................."));

            //将写入数据库操作剥离
            if (++this.procDoneNum1 == this.processNum)
            {
                writeReRayToDb();
            }
        }
        void MainFunction()
        {
            ThreadHelperClass.SetText(this, lblStatusValue, "Loading sample images to memory...");
            SourceImagesLoader(txtSampleImagesFolderLocation.Text);

            if (isSampleImageFolderEmpty)
            {
                ThreadHelperClass.SetText(this, lblStatus, "The selected folder has no images or the images is not supported");
            }
            else
            {
                ThreadHelperClass.SetText(this, lblStatusValue, "Loading finished. " + PTAMSourceImages.Length + " images  were loaded into memory.");
            }
            Thread.Sleep(100);
            ThreadHelperClass.SetText(this, lblStatusValue, "Preparing for sending...");

            MMF mappedFile = new MMF();

            mappedFile.CreateNewFile(PTAMModuleSourceImageFileName, 10000000);
            int position = 0;

            do
            {
                Stopwatch overallPerformance = new Stopwatch();
                overallPerformance.Start();

                // Create preview of loaded image
                ThreadHelperClass.SetImage(this, imgImagePreview, PTAMSourceImages[position]);
                ThreadHelperClass.SetText(this, lblStatusValue, "Now previewing image: " + fileNames[position]);
                position++;

                if (position == fileNames.Length)
                {
                    position = 0;
                }

                #region Receiver threat
                receiverThread = new Thread(ResultReceiver);
                receiverThread.Start();
                #endregion Receiver threat

                ThreadHelperClass.SetText(this, lblStatusValue, "Writing image to memory-mapped file");

                #region Image converter

                // Convert image to array and save to tempImage
                Stopwatch imageConversionWatcher = new Stopwatch();
                imageConversionWatcher.Start();

                byte[] tempImage;
                using (var ms = new MemoryStream())
                {
                    PTAMSourceImages[position].Save(ms, PTAMSourceImages[position].RawFormat);
                    tempImage = ms.ToArray();
                }
                imageConversionWatcher.Stop();
                testerImageConversionPerformance = imageConversionWatcher.ElapsedMilliseconds;
                #endregion Image converter

                #region Memory-Mapped File writing
                Stopwatch MMFWatcher = new Stopwatch();
                MMFWatcher.Start();
                // Write the image to memory-mapped file
                mappedFile.AddInformation(Convert.ToBase64String(tempImage));
                MMFWatcher.Stop();
                testerMemoryMappedFilePerformance = MMFWatcher.ElapsedMilliseconds;
                #endregion Memory-Mapped File writing
                ThreadHelperClass.SetText(this, lblStatusValue, "File writen. Sending notification to PTAM Module");

                // Notify Kursor3D Module about the image
                SendReport(PTAMModuleNamedPipeSendingChannel);

                ThreadHelperClass.SetText(this, lblStatusValue, "Module connected. Now waiting for the module to complete the process");

                // Wait for receiver thread to complete
                if (receiverThread.IsAlive)
                {
                    receiverThread.Join();
                }
                receiverThread = null;
                ThreadHelperClass.SetText(this, lblStatusValue, "Module has finished the work. Writing the received values");

                #region UI setter
                #region Pose

                #region Position
                ThreadHelperClass.SetText(this, lblPositionXValue, receivedXPosition.ToString());
                ThreadHelperClass.SetText(this, lblPositionYValue, receivedYPosition.ToString());
                ThreadHelperClass.SetText(this, lblPositionZValue, receivedZPosition.ToString());
                #endregion Position
                #region Orientation
                ThreadHelperClass.SetText(this, lblOrientationXValue, receivedXOrientation.ToString());
                ThreadHelperClass.SetText(this, lblOrientationYValue, receivedYOrientation.ToString());
                ThreadHelperClass.SetText(this, lblOrientationZValue, receivedZOrientation.ToString());
                #endregion Orientation
                #endregion Pose

                #region Points
                ThreadHelperClass.SetText(this, lblTotalPointCreatedValue, totalPointsCreated.ToString());
                #endregion Points
                overallPerformance.Stop();
                testerOverallPerformance = overallPerformance.ElapsedMilliseconds;
                ThreadHelperClass.SetText(this, lblOverallPerformanceValue, testerOverallPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblMemoryMappedFilePerformanceValue, testerMemoryMappedFilePerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblImageConversionPerformanceValue, testerImageConversionPerformance.ToString() + "ms");

                ThreadHelperClass.SetText(this, lblPTAMModuleOverallPerformanceValue, PTAMModuleOverallPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblPTAMModuleTrackingPerformanceValue, PTAMTrackingPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblPTAMModuleMappingPerformanceValue, PTAMMappingPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblPTAMModuleImageConversionPerformanceValue, PTAMImageConversionPerformance.ToString() + "ms");
                ThreadHelperClass.SetText(this, lblPTAMModuleMemoryMappedFileReadingPerformanceValue, PTAMMemoryMappedFileReadingPerformance.ToString() + "ms");
                #endregion UI setter
            } while (!isExitRequested);
        }
Example #13
0
        public SharedMessage Dequeue()
        {
            using (var stream = MMF.CreateViewStream())
            {
                if (IsEmpty)
                {
                    Log("No Data");
                    return(null);
                }
                else
                {
                    using (var sr = new BinaryReader(stream))
                    {
                        stream.Position = Rear;
                        var header = new byte[HeaderSize];
                        if (stream.Length - Rear >= HeaderSize)
                        {
                            header = sr.ReadBytes(HeaderSize);
                        }
                        else
                        {
                            var firstLen  = (int)(stream.Length - stream.Position);
                            var secondLen = HeaderSize - firstLen;
                            var header1   = sr.ReadBytes(firstLen);
                            stream.Position = ReservedSize;
                            var header2 = sr.ReadBytes(secondLen);
                            Array.Copy(header1, header, firstLen);
                            Array.Copy(header2, 0, header, firstLen - 1, secondLen);
                        }
                        var level = BitConverter.ToInt32(header, 0);
                        var time  = new DateTime(BitConverter.ToInt64(header, 4));
                        var len   = BitConverter.ToInt32(header, 12);

                        var msg = new byte[len];
                        if (stream.Position + len <= stream.Length)
                        {
                            msg = sr.ReadBytes(len);
                        }
                        else
                        {
                            var firstLen  = (int)(stream.Length - stream.Position);
                            var secondLen = len - firstLen;
                            var msg1      = sr.ReadBytes(firstLen);
                            stream.Position = ReservedSize;
                            var msg2 = sr.ReadBytes(secondLen);
                            Array.Copy(msg1, msg, firstLen);
                            Array.Copy(msg2, 0, msg, firstLen - 1, secondLen);
                        }

                        Rear   = stream.Position;
                        IsFull = false;

                        // 1. Rear is catching up Front
                        // 2. Rear is near the end of the stream, the remaining data is not enough
                        if (Front - Rear < HeaderSize || (stream.Length - Rear - 1 + (Front - ReservedSize)) < HeaderSize)
                        {
                            IsEmpty = true;
                        }

                        Log("Front:{0}, Rear:{1}", Front, Rear);
                        var message = Encoding.UTF8.GetString(msg);
                        Log("Level:{0}, Time:{1}, Message:{2}", level, time, message);
                        return(new SharedMessage()
                        {
                            Level = level,
                            Timestamp = time,
                            Message = message
                        });
                    }
                }
            }
        }
        void ModelerThread()
        {
            ThreadHelperClass.SetText(this, lblStatusValue, "Requesting the HUB resolution...");

            bool isExitRequested = false;
            char receivedCode;

            NamedPipesServer imageNotifier = new NamedPipesServer();
            MMF    ImageData;
            Bitmap imageReceived;

            #region Screen Resolution Request
            int width;
            int height;
            // Connect for first time check for resolution used by main program
            NamedPipesServer server = new NamedPipesServer();
            server.CreateNewServerPipe("res-pipe", NamedPipesServer.PipeDirection.DirectionInOut, NamedPipesServer.SendMode.MessageMode);
            server.WaitForConnection();
            string resolution = server.ReadMessage();

            // Separate screen width and height
            string[] res = resolution.Split('x');
            width  = Convert.ToInt32(res[0]);
            height = Convert.ToInt32(res[1]);

            string receivedResolution = "Connected client resolution: " + width + " x " + height;
            ThreadHelperClass.SetText(this, lblStatusValue, "HUB's resolution received");
            ThreadHelperClass.SetText(this, lblScreenResolutionValue, receivedResolution);
            #endregion Screen Resolution Request

            bool isFirstTime = true;
            do
            {
                ThreadHelperClass.SetText(this, lblStatusValue, "Waiting new notification...");

                try
                {
                    // Memory-mapped file access
                    server.CreateNewServerPipe("ImageNotifier", NamedPipesServer.PipeDirection.DirectionInOut, NamedPipesServer.SendMode.ByteMode);
                    server.WaitForConnection();
                    if (server.ReadByte() == (char)'y')
                    {
                        ThreadHelperClass.SetText(this, lblStatusValue, "Receiving image...");
                        byte[] file = null;
                        Console.WriteLine('y');
                        // Load image from Memory-mapped file and display as texture for model.
                        MMF mappedFile = new MMF();
                        mappedFile.OpenExisting("MapTest");
                        file = Convert.FromBase64String(mappedFile.ReadContent(MMF.DataType.DataString));


                        using (var ms = new MemoryStream(file))
                        {
                            imageReceived = new Bitmap(ms);
                        }
                        ThreadHelperClass.SetImage(this, imgTesterPreviewImage, imageReceived);
                    }
                }
                catch (Exception err)
                {
                    throw;
                }
                server.Disconnect();
                server.ClosePipe();

                //try
                //{

                //    imageNotifier.CreateNewServerPipe("test-pipe", NamedPipesServer.PipeDirection.DirectionInOut, NamedPipesServer.SendMode.ByteMode);
                //    imageNotifier.WaitForConnection();

                //    receivedCode = (char)imageNotifier.ReadByte();
                //    imageNotifier.WaitForPipeDrain();
                //    if (receivedCode == 'x')
                //        isExitRequested = true;
                //    else
                //        isExitRequested = false;

                //    if (receivedCode == 'y')
                //    {
                //        ThreadHelperClass.SetText(this, lblStatusValue, "New notification. Receiving...");
                //        byte[] file = null;
                //        // Load image from Memory-mapped file
                //        MMF mappedFile = new MMF();
                //        mappedFile.OpenExisting("MapTest");
                //        file = Convert.FromBase64String(mappedFile.ReadContent(MMF.DataType.DataString));


                //        using (var ms = new MemoryStream(file))
                //        {
                //            imageReceived = new Bitmap(ms);
                //        }

                //        ThreadHelperClass.SetImage(this, previewImage, imageReceived);
                //    }
                //}
                //catch (Exception err)
                //{

                //    throw;
                //}
                //server.Disconnect();
                //server.ClosePipe();
            } while (!isExitRequested);
        }