public void Base64BytesEncodeTest(int count)
        {
            var inputBytes = new byte[count];
            var r          = new Random(count);

            r.NextBytes(inputBytes);
            var expectedBase64String = Convert.ToBase64String(inputBytes);
            var expectedBase64Buffer = expectedBase64String.ToCharArray().Select(v => (byte)v).ToArray();

            // transform block
            var inputOffset = r.Next(0, 100);
            var inputBuffer = new byte[inputOffset + inputBytes.Length + inputOffset];

            Buffer.BlockCopy(inputBytes, 0, inputBuffer, inputOffset, inputBytes.Length);
            var outputOffset = r.Next(0, 100);
            var outputBuffer = new byte[outputOffset + expectedBase64Buffer.Length];
            var written      = Base64Convert.Encode(new ArraySegment <byte>(inputBuffer, inputOffset, inputBytes.Length), new ArraySegment <byte>(outputBuffer, outputOffset, outputBuffer.Length - outputOffset), out var inputUsed, out var outputUsed);
            var actualOutput = outputBuffer.Skip(outputOffset).ToArray();

            Assert.Equal(expectedBase64Buffer.Length, Base64Convert.GetBase64OutputLength(inputBytes.Length, true));
            Assert.Equal(expectedBase64Buffer.Length, written);
            Assert.Equal(expectedBase64Buffer.Length, outputUsed);
            Assert.Equal(inputBytes.Length, inputUsed);
            Assert.Equal(expectedBase64Buffer, actualOutput);
        }
        public void BufferToBase64ConvertTest(int count)
        {
            var expectedBuffer = new byte[count];
            var r = new Random(count);

            r.NextBytes(expectedBuffer);
            var expectedBase64String = Convert.ToBase64String(expectedBuffer);
            var expectedBase64Chars  = expectedBase64String.ToCharArray();

            var inputOffset = r.Next(0, 100);
            var inputBuffer = new byte[inputOffset + expectedBuffer.Length + inputOffset];

            Buffer.BlockCopy(expectedBuffer, 0, inputBuffer, inputOffset, expectedBuffer.Length);

            // buffer -> base64 string
            var base64String = Base64Convert.ToString(inputBuffer, inputOffset, expectedBuffer.Length);

            Assert.Equal(expectedBase64String, base64String);
            // buffer -> base64 buffer
            var base64Chars = Base64Convert.ToCharArray(inputBuffer, inputOffset, expectedBuffer.Length);

            Assert.Equal(expectedBase64Chars, base64Chars);

            // buffer -> base64 buffer (copy)
            base64Chars = new char[expectedBase64Chars.Length];
            Base64Convert.Encode(new ArraySegment <byte>(inputBuffer, inputOffset, expectedBuffer.Length), new ArraySegment <char>(base64Chars));
            Assert.Equal(expectedBase64Chars, base64Chars);
        }
        public void Base64ToBufferConvertTest(int count)
        {
            var expectedBuffer = new byte[count];
            var r = new Random(count);

            r.NextBytes(expectedBuffer);
            var expectedBase64String = Convert.ToBase64String(expectedBuffer);
            var expectedBase64Chars  = expectedBase64String.ToCharArray();


            var inputOffset = r.Next(0, 100);
            var inputBuffer = new char[inputOffset + expectedBase64Chars.Length + inputOffset];

            expectedBase64Chars.CopyTo(inputBuffer, inputOffset);
            var inputString = new string('a', inputOffset) + expectedBase64String + new string('a', inputOffset);

            // base64 string -> buffer
            var outputBuffer = Base64Convert.ToBytes(inputString, inputOffset, expectedBase64String.Length);

            Assert.Equal(expectedBuffer, outputBuffer);

            // base64 buffer -> buffer
            outputBuffer = Base64Convert.ToBytes(inputBuffer, inputOffset, expectedBase64Chars.Length);
            Assert.Equal(expectedBuffer, outputBuffer);

            // base64 buffer -> buffer (copy)
            outputBuffer = new byte[expectedBuffer.Length];
            Base64Convert.Decode(new ArraySegment <char>(inputBuffer, inputOffset, expectedBase64Chars.Length), new ArraySegment <byte>(outputBuffer));
            Assert.Equal(expectedBuffer, outputBuffer);

            // base64 buffer -> buffer (copy)
            outputBuffer = new byte[expectedBuffer.Length];
            Base64Convert.Decode(inputString, inputOffset, expectedBase64Chars.Length, new ArraySegment <byte>(outputBuffer));
            Assert.Equal(expectedBuffer, outputBuffer);
        }
예제 #4
0
        public void ProcessLoggerMessage(SpoolerMessage message)
        {
            var str1 = Base64Convert.Base64Decode(message.Message);

            if (message.Type == MessageType.LoggingMessage)
            {
                lock (general_log)
                {
                    general_log.Enqueue(message.SerialNumber.ToString() + "::" + str1);
                    log_updated = true;
                }
            }
            else
            {
                if (message.Type != MessageType.FullLoggingData)
                {
                    return;
                }

                string[] strArray = str1.Split('\n');
                lock (general_log)
                {
                    general_log.Clear();
                    foreach (var str2 in strArray)
                    {
                        general_log.Enqueue(message.SerialNumber.ToString() + "::" + str2);
                    }

                    log_updated = true;
                }
            }
        }
예제 #5
0
        public void ToByteStringTest()
        {
            var baseNString = "eg==";
            var expected    = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNString);

            Assert.Equal(expected, actual);
        }
예제 #6
0
        public void ToBytesByteArrayPartialTest()
        {
            var baseNCharBytes = "99eg==99".ToCharArray().Select(ch => (byte)ch).ToArray();
            var expected       = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNCharBytes, 2, baseNCharBytes.Length - 4);

            Assert.Equal(expected, actual);
        }
예제 #7
0
        public void ToStringTest()
        {
            var expected = "eg==";
            var data     = new byte[] { 122 };

            var actual = Base64Convert.ToString(data);

            Assert.Equal(expected, actual);
        }
예제 #8
0
        public void ToBytesByteArrayTest()
        {
            var baseNCharBytes = "eg==".ToCharArray().Select(ch => (byte)ch).ToArray();
            var expected       = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNCharBytes);

            Assert.Equal(expected, actual);
        }
예제 #9
0
        public void ToBytesCharArrayPartialTest()
        {
            var baseNChars = "99eg==99".ToCharArray();
            var expected   = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNChars, 2, baseNChars.Length - 4);

            Assert.Equal(expected, actual);
        }
예제 #10
0
        public void ToBytesCharArrayTest()
        {
            var baseNChars = "eg==".ToCharArray();
            var expected   = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNChars);

            Assert.Equal(expected, actual);
        }
예제 #11
0
        public void ToCharArrayPartialTest()
        {
            var expected = "eg==".ToCharArray();
            var data     = new byte[] { 255, 122, 255 };

            var actual = Base64Convert.ToCharArray(data, 1, 1);

            Assert.Equal(expected, actual);
        }
예제 #12
0
        public void ToCharArrayTest()
        {
            var expected = "eg==".ToCharArray();
            var data     = new byte[] { 122 };

            var actual = Base64Convert.ToCharArray(data);

            Assert.Equal(expected, actual);
        }
예제 #13
0
        public void ToStringPartialTest()
        {
            var expected = "eg==";
            var data     = new byte[] { 255, 122, 255 };

            var actual = Base64Convert.ToString(data, 1, 1);

            Assert.Equal(expected, actual);
        }
예제 #14
0
        public void ToBytesStringPartialTest()
        {
            var baseNString = "99eg==99";
            var expected    = new byte[] { 122 };

            var actual = Base64Convert.ToBytes(baseNString, 2, baseNString.Length - 4);

            Assert.Equal(expected, actual);
        }
예제 #15
0
        public void DataProcessFactoryBase64Test()
        {
            string txt   = "x";
            var    b     = new Base64Convert();
            var    bb    = StringByteConver.ToByte(txt);
            var    code  = b.Process(bb);
            var    code2 = b.DeProcess(code);

            var txt1 = StringByteConver.ToString(bb);
            var txt2 = StringByteConver.ToString(code2);

            Assert.AreEqual(txt1, txt2);
        }
예제 #16
0
        public void Base64ConvertTest()
        {
            var testTest = "hello";
            var bs       = System.Text.Encoding.Default.GetBytes(testTest);
            var stream   = new MemoryStream(bs);
            var actual   = Base64Convert.ToBase64(stream);

            var expected = Base64Convert.FrmBase64(actual);

            var test2 = System.Text.Encoding.Default.GetString(expected.ToArray());

            Assert.AreEqual(testTest, test2);
        }
        public void Decode_GivenUrlSafeFlag_ReturnsPlainText()
        {
            var encoded = Encoding.UTF8.GetBytes("ocu7BkU2bu1mq-yB2dL_4A");
            var bytes   = Base64Convert.Decode(encoded);

            bytes.Should().BeEquivalentTo(new byte[]
            {
                161, 203, 187, 6,
                69, 54, 110, 237,
                102, 171, 236, 129,
                217, 210, 255, 224
            });
        }
        public void Encode_GivenUrlSafeFlag_ReturnsUrlSafeBase64()
        {
            var bytes = new byte[]
            {
                161, 203, 187, 6,
                69, 54, 110, 237,
                102, 171, 236, 129,
                217, 210, 255, 224
            };

            var encoded   = Base64Convert.Encode(bytes, true);
            var encString = Encoding.UTF8.GetString(encoded);

            encString.Should().Be("ocu7BkU2bu1mq-yB2dL_4A");
        }
예제 #19
0
        public void StreamHeandlerTest()
        {
            var text1 = @"hello
who";

            var stream    = StreamHeandler.StringToStream(text1);
            var zipStream = ZipCompress.Compress(stream);
            var base64    = Base64Convert.ToBase64(zipStream);
            var txt1      = StreamHeandler.StreamToString(base64);

            var txt2 = txt1;

            var base642     = StreamHeandler.StringToStream(txt2);
            var unZipStream = Base64Convert.FrmBase64(base642);
            var steam2      = ZipCompress.UnCompress(unZipStream);
            var text2       = StreamHeandler.StreamToString(steam2);

            Assert.AreEqual(text1, text2);
        }
예제 #20
0
        public static string AddBuildingWallBlock(string jsons)//添加幕墙板块信息
        {
            int count = 0;

            try
            {
                string            path     = ConfigurationSettings.AppSettings["Savepath"];
                AddBuildingBlock  data     = JsonConvert.DeserializeObject <AddBuildingBlock>(jsons);
                BuildingWallBlock block    = new BuildingWallBlock();
                string            Response = "";
                for (int i = 0; i < data.blocks.Count(); i++)
                {
                    block.adjustedLocationTopLeftX = data.blocks[i].adjustedLocationTopLeftX;
                    block.adjustedLocationTopLeftY = data.blocks[i].adjustedLocationTopLeftY;
                    block.blockLocationTopLeftX    = data.blocks[i].blockLocationTopLeftX;
                    block.blockLocationTopLeftY    = data.blocks[i].blockLocationTopLeftY;
                    block.buildingWallBlockNo      = data.blocks[i].buildingWallBlockNo;
                    block.buildingWallId           = data.buildingWallId;
                    block.buildingWallImageId      = data.buildingWallImageId;
                    block.width  = data.blocks[i].width;
                    block.height = data.blocks[i].height;
                    if (data.blocks[i].name == null)
                    {
                        data.blocks[i].name = data.blocks[i].value;
                    }
                    Response = HTTPService.AddWallBlock(block, data.blocks[i].name, data.blocks[i].value);
                    count++;
                }
                string savepath = path + DateTime.Now.ToString("yyyyMMddhhmmssff") + ".jpg";
                Base64Convert.Base64ToFileAndSave(data.resultImageFile, savepath);//文件流保存到文件
                int resultImageFileId = UploadFile.Upload(savepath);
                File.Delete(savepath);
                string result = HTTPService.UpdateWallimg(data.buildingWallImageId, resultImageFileId);
                return(result);
            }
            catch (Exception ex)
            {
                Console.WriteLine(count);
                Console.WriteLine(ex.Message + "," + ex.TargetSite + "," + ex.Source);
                return(ex.Message + "," + ex.TargetSite + "," + ex.Source);
            }
        }
예제 #21
0
        public static string UpdateBuildingAssemble(string jsons, string code, string img)//立面拼装信息
        {
            string save = ConfigurationSettings.AppSettings["Savepath"];

            save += DateTime.Now.ToString("yyyyMMddhhmmssff") + ".jpg";
            Base64Convert.Base64ToFileAndSave(img, save);
            JObject             jResult = JObject.Parse(jsons);
            JArray              jData   = (JArray)jResult["data"];
            List <AssembleInfo> results = jData.ToObject <List <AssembleInfo> >();

            Console.WriteLine(code);
            string result         = "";
            int    buildingWallId = 0;

            for (int i = 0; i < results.Count(); i++)
            {
                buildingWallId = HTTPService.UpdateBuidlingAssemble(results[i]);
            }
            result = HTTPService.UpdateBuildingWallAssemble(buildingWallId, code, save);
            Console.WriteLine(result);
            return(result);
        }
예제 #22
0
        private void PrinterLoggerCallback(string message, string printer_serial)
        {
            if (printer_serial == "Detecting")
            {
                message        = "Detecting>" + message;
                printer_serial = "00-00-00-00-00-000-000";
            }
            var spoolerMessage = new SpoolerMessage(MessageType.LoggingMessage, new PrinterSerialNumber(printer_serial), Base64Convert.Base64Encode(message));

            lock (logging_queue)
            {
                logging_queue.Add(spoolerMessage);
            }
        }
 public void DecodeString_GivenEncodedStringAndUrlSafeFlag_ReturnsPlainText(string base64, string expected)
 {
     Base64Convert.Decode(base64).Should().Be(expected);
 }
 public void Encode_GivenPlainTextAndUrlSafeFlag_ReturnsUrlSafeBase64String(string value, string expected)
 {
     Base64Convert.Encode(value, true).Should().Be(expected);
 }
 public void Encode_GivenPlainTextValue_ReturnsEncodedBase64String(string value, string expected)
 {
     Base64Convert.Encode(value).Should().Be(expected);
 }
예제 #26
0
        /// <summary>
        /// 图像截取、矫正
        /// </summary>
        public static string Pic_Rectity(string FileName, string point_json, int originalImageFileId, int buildingWallId)
        {
            BuildingWallImage building = new BuildingWallImage();
            string            path     = ConfigurationSettings.AppSettings["Savepath"];
            string            savepath = path + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";

            Base64Convert.Base64ToFileAndSave(FileName, savepath);//文件流保存到文件
            Positions    positions = new Positions();
            string       filepath  = path;
            Mat          src       = Cv2.ImRead(savepath); //原始图像
            List <Point> getpt     = JsonConvert.DeserializeObject <List <Point> >(point_json);
            Mat          dst       = new Mat();
            //new Window("1", WindowMode.FreeRatio, src);
            Mat roi = Mat.Zeros(src.Size(), MatType.CV_8U);

            Point[] points = getpt.ToArray();
            int     maxX = points[0].X, maxY = points[0].Y, minX = points[0].X, minY = points[0].Y;

            Point[][] contours = { points };
            for (int i = 0; i < points.Length; i++)//求出最小坐标
            {
                if (points[i].X > maxX)
                {
                    maxX = points[i].X;
                }
                if (points[i].Y > maxY)
                {
                    maxY = points[i].Y;
                }
                if (points[i].X < minX)
                {
                    minX = points[i].X;
                }
                if (points[i].Y < minY)
                {
                    minY = points[i].Y;
                }
            }
            int width  = maxX - minX;
            int height = maxY - minY;

            Cv2.DrawContours(roi, contours, 0, Scalar.All(255), -1);
            src.CopyTo(dst, roi);//保存到新画布
            //new Window("转化前", WindowMode.FreeRatio, dst);

            dst = dst.SubMat(new Rect(minX, minY, width, height));

            Point2f[] pt = new Point2f[4];
            for (int i = 0; i < points.Length; i++)//图像坐标
            {
                pt[i].X = points[i].X - minX;
                pt[i].Y = points[i].Y - minY;
            }
            Point2f[] box = new Point2f[4];//画布角点
            box[0] = new Point(0, 0);
            box[1] = new Point(width, 0);
            box[2] = new Point(width, height);
            box[3] = new Point(0, height);
            //图像的拉伸处理
            var h = Cv2.GetPerspectiveTransform(pt, box);

            Cv2.WarpPerspective(dst, dst, h, new Size(width, height));
            string time = DateTime.Now.ToString("yyyyMMddhhmmssff") + ".jpg";

            filepath += time;
            Cv2.ImWrite(filepath, dst);
            positions.FileName            = ConfigurationSettings.AppSettings["Returnpath"] + time;
            positions.point2              = Findarea(dst);
            positions.imgFileId           = UploadFile.Upload(savepath);
            positions.adjustedImageFileId = UploadFile.Upload(filepath);
            building.adjustedImageFileId  = positions.adjustedImageFileId;
            //building.selectedImageFileId = positions.adjustedImageFileId;
            building.areaTopLeftX        = points[0].X;
            building.areaTopLeftY        = points[0].Y;
            building.areaTopRightX       = points[1].X;
            building.areaTopRightY       = points[1].Y;
            building.areaBottomLeftX     = points[2].X;
            building.areaBottomLeftY     = points[2].Y;
            building.areaBottomRightX    = points[3].X;
            building.areaBottomRightY    = points[3].Y;
            building.buildingWallId      = buildingWallId;
            building.originalImageFileId = originalImageFileId;
            building.resultImageFileId   = 1870;
            string        result = HTTPService.AddWallImage(building);
            ResultMessage s      = JsonConvert.DeserializeObject <ResultMessage>(result);

            positions.buildingWallImageId = s.data;
            string js = JsonConvert.SerializeObject(positions);

            Console.WriteLine(js);
            File.Delete(savepath);
            return(js);
        }
예제 #27
0
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public DataResult PullData(DataParameter parameter)
        {
            LogHelper.Debug(GetType(), "准备获取数据", LogInfo.ObjectToMessage(parameter));

            var success = true;
            var result  = new DataResult();
            var crchash = new CrcHash();

            PHPRPC_Client    client          = new PHPRPC_Client("http://localhost:4631/PullData.aspx");
            IPullDataService pullDataService = (IPullDataService)client.UseService(typeof(IPullDataService));

            //var pullDataService = AppCtx.Resolve<IPullDataService>("PullService");

            //初始化异常
            if (pullDataService == null)
            {
                LogHelper.Debug(GetType(), "获取接口失败");
                return(null);
            }


            #region 开始请求
            var beginParameter = new DataParameter();
            beginParameter.Action = parameter.Action;
            LogHelper.Debug(GetType(), "发送请求", LogInfo.ObjectToMessage(beginParameter));
            var beginDataInfo = pullDataService.Begin(beginParameter);
            if (beginDataInfo == null)
            {
                success             = false;
                result.ErrorId      = (int)DataDictionary.ErrorType.DataPullBeginError;
                result.ErrorMessage = "";
                return(result);
            }
            else
            {
                result.Action     = parameter.Action;
                result.SplitCount = beginDataInfo.SpliteCount;
            }
            #endregion


            #region 请求数据
            //初始化容器以收集字符串
            var sb = new StringBuilder(beginDataInfo.SpliteCount * dataLength);

            LogHelper.Debug(GetType(), "开始请求具体数据");
            for (int i = 0; i < beginDataInfo.SpliteCount; i++)
            {
                //请求数据
                //todo:需优化,以重新请求超时未能请求到的数据
                //var tcs = new TaskCompletionSource<DataSegment>();
                //WaitCallback asyncWork = _ =>
                //{
                var dataSegment = pullDataService.Pull(beginDataInfo.DataId, i);
                if (dataSegment == null)
                {
                    //tcs.SetResult(null);
                }
                else
                {
                    LogHelper.Debug(GetType(), string.Format("获取索引为{0}的数据:", i),
                                    LogInfo.ObjectToMessage(dataSegment));

                    var stream = StreamHeandler.StringToStream(dataSegment.DataString);
                    dataSegment = !crchash.Hash(stream, dataSegment.Crccode)
                                          ? null
                                          : dataSegment;
                }
                //        tcs.SetResult(dataSegment);
                //    }
                //};
                //ThreadPool.QueueUserWorkItem(asyncWork);
                //var task = tcs.Task;
                //var taskResult = task.Result;
                if (dataSegment != null)
                {
                    sb.Insert(i * dataLength, dataSegment.DataString);
                }
                else
                {
                    result.ErrorId      = (int)DataDictionary.ErrorType.DataPullError;
                    result.ErrorMessage = "";
                    success             = false;
                    break;
                }
            }
            #endregion

            #region 结束请求
            var endData = pullDataService.End(beginDataInfo.DataId, !success);
            LogHelper.Debug(GetType(), "结束请求数据", LogInfo.ObjectToMessage(endData));
            if (endData == null)
            {
                result.ErrorId      = (int)DataDictionary.ErrorType.DataPullEndError;
                result.ErrorMessage = "";
                success             = false;
            }
            #endregion

            if (success)
            {
                var stream = StreamHeandler.StringToStream(sb.ToString());
                var base64 = Base64Convert.FrmBase64(stream);
                LogHelper.Debug(GetType(), "解压请求到的数据");
                var unZipStream = ZipCompress.UnCompress(base64);
                result.CrcCode = crchash.GetHashCode(unZipStream);
                LogHelper.Debug(GetType(), "生成校验码", result.CrcCode);
                result.DataString = StreamHeandler.StreamToString(unZipStream);
                //返回
            }

            return(result);
        }
예제 #28
0
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public DataResult PushData(DataParameter parameter)
        {
            LogHelper.Debug(GetType(), "准备发送数据", LogInfo.ObjectToMessage(parameter));


            PHPRPC_Client    client          = new PHPRPC_Client("http://localhost:4631/PullData.aspx");
            IPushDataService pushDataService = (IPushDataService)client.UseService(typeof(IPushDataService));

            //var pushDataService = AppCtx.Resolve<IPushDataService>("PushService");

            //初始化异常
            if (pushDataService == null)
            {
                LogHelper.Warn(GetType(), "获取接口失败");
                return(null);
            }

            var success       = true;
            var result        = new DataResult();
            var beginDataInfo = new DataInfo();
            var crchash       = new CrcHash();

            result.DataId     = Guid.NewGuid().ToString();
            result.Action     = parameter.Action;
            result.CrcCode    = parameter.CrcCode;
            result.DataString = parameter.DataString;

            var stream    = StreamHeandler.StringToStream(parameter.DataString);
            var zipStream = ZipCompress.Compress(stream);
            var base64    = Base64Convert.ToBase64(zipStream);
            var sb        = new StringBuilder(StreamHeandler.StreamToString(base64));
            var count     = (int)Math.Ceiling(sb.Length / (double)dataLength);

            result.SplitCount = count;

            #region 准备发送数据
            beginDataInfo.ActionId    = parameter.Action;
            beginDataInfo.DataId      = result.DataId;
            beginDataInfo.SpliteCount = count;

            LogHelper.Debug(GetType(), "开始请求发送数据", LogInfo.ObjectToMessage(beginDataInfo));
            pushDataService.Begin(beginDataInfo);
            #endregion

            #region 发送数据
            LogHelper.Debug(GetType(), "开始发送数据");
            for (int i = 0; i < count; i++)
            {
                var          tcs       = new TaskCompletionSource <bool>();
                WaitCallback asyncWork = _ =>
                {
                    var beginPos = i * dataLength;
                    var legth    = i == count - 1 ? sb.Length - beginPos : dataLength;
                    var data     = sb.ToString(beginPos, legth);

                    var dataSegment = new DataSegment();
                    dataSegment.DataId     = result.DataId;
                    dataSegment.Crccode    = crchash.GetHashCode(StreamHeandler.StringToStream(data));
                    dataSegment.DataString = data;
                    dataSegment.Index      = i;
                    LogHelper.Debug(GetType(), string.Format("发送数据,ID:{0},索引:{1}", result.DataId, i), LogInfo.ObjectToMessage(dataSegment));
                    pushDataService.Push(dataSegment);

                    tcs.SetResult(true);
                };
                ThreadPool.QueueUserWorkItem(asyncWork);

                var task       = tcs.Task;
                var taskResult = task.Result;
                if (!taskResult)
                {
                    success = false;
                    break;
                }
            }
            #endregion

            #region 发送完成
            var endResult = pushDataService.End(beginDataInfo.DataId, !success);
            LogHelper.Debug(GetType(), "发送数据完成");

            if (endResult == null)
            {
                success = false;
            }
            #endregion

            return(result);
        }
예제 #29
0
파일: Printer.cs 프로젝트: urish/M3D
        public void ProcessSpoolerMessage(SpoolerMessage message)
        {
            var asyncCallObject = (AsyncCallObject)null;
            var flag            = false;

            if (message.Type == MessageType.RawData)
            {
                lock (thread_sync)
                {
                    incoming_data = message.GetRawData();
                }
            }
            else if (message.Type == MessageType.PluginMessage)
            {
                ProcessPluginMessageFromSpooler(message);
            }
            else if (message.Type == MessageType.LoggingMessage)
            {
                AddMessageToLog(Base64Convert.Base64Decode(message.Message));
                lock (log)
                {
                    log_updated = true;
                }
            }
            else if (message.Type == MessageType.FullLoggingData)
            {
                string[] strArray = Base64Convert.Base64Decode(message.Message).Split('\n');
                log.Clear();
                foreach (var message1 in strArray)
                {
                    AddMessageToLog(message1);
                }

                lock (log)
                {
                    log_updated = true;
                }
            }
            else if (message.Type == MessageType.BedLocationMustBeCalibrated || message.Type == MessageType.BedOrientationMustBeCalibrated || message.Type == MessageType.CheckGantryClips)
            {
                mylockID         = Guid.Empty;
                lockstatus.Value = PrinterLockStatus.Unlocked;
                lock (waiting_object_lock)
                {
                    if (waiting_object != null)
                    {
                        asyncCallObject            = waiting_object;
                        waiting_object             = null;
                        asyncCallObject.callresult = CommandResult.Failed_GantryClipsOrInvalidZ;
                    }
                }
            }
            else if ((message.Type == MessageType.LockConfirmed || message.Type == MessageType.LockResult) && message.SerialNumber == Info.serial_number)
            {
                uint num = 0;
                EventLockTimeOutCallBack callback = null;
                CommandResult            commandResult;
                if (message.Type == MessageType.LockResult)
                {
                    var s   = message.Message.Substring(0, 8);
                    var str = message.Message.Substring(8);
                    try
                    {
                        num           = uint.Parse(s);
                        commandResult = (CommandResult)Enum.Parse(typeof(CommandResult), str);
                    }
                    catch (ArgumentException ex)
                    {
                        commandResult = CommandResult.Failed_Exception;
                    }
                    if (commandResult == CommandResult.Success)
                    {
                        can_check_idle.Value = true;
                        return;
                    }
                    if (commandResult == CommandResult.Pending)
                    {
                        lockstatus.Value = PrinterLockStatus.OurLockPending;
                        return;
                    }
                    if (commandResult == CommandResult.LockForcedOpen)
                    {
                        lockstatus.Value = PrinterLockStatus.Unlocked;
                    }
                    else if (commandResult == CommandResult.LockLost_TimedOut)
                    {
                        lock (timeout_lock_sync)
                        {
                            callback = __LockTimeOutCallBack;
                            __LockTimeOutCallBack = null;
                        }
                    }
                    if (commandResult != CommandResult.CommandInterruptedByM0)
                    {
                        flag = true;
                    }
                }
                else
                {
                    mylockID         = Guid.Parse(message.Message);
                    commandResult    = CommandResult.Success_LockAcquired;
                    lockstatus.Value = PrinterLockStatus.WeOwnLocked;
                }
                lock (waiting_object_lock)
                {
                    if (waiting_object != null)
                    {
                        if (commandResult == CommandResult.SuccessfullyReceived)
                        {
                            if (waiting_object.callbackType != CallBackType.SuccessfullyReceived)
                            {
                                goto label_59;
                            }
                        }
                        asyncCallObject = waiting_object;
                        waiting_object  = null;
                    }
                }
label_59:
                if (flag)
                {
                    mylockID         = Guid.Empty;
                    lockstatus.Value = PrinterLockStatus.Unlocked;
                }
                if (asyncCallObject != null)
                {
                    if (num != 0U && (int)num != (int)asyncCallObject.callID)
                    {
                        commandResult = CommandResult.Failed_AsyncCallbackError;
                    }

                    asyncCallObject.callresult = commandResult;
                }
                if (callback != null)
                {
                    ThreadPool.QueueUserWorkItem(new WaitCallback(DoTimeoutCallBack), new Printer.TimeoutProperties(callback, (IPrinter)this));
                }
            }
            if (asyncCallObject != null)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(DoAsyncCallBack), asyncCallObject);
            }

            if (OnProcessSpoolerMessage == null)
            {
                return;
            }

            OnProcessSpoolerMessage(message);
        }
예제 #30
0
 public string DecodeUsingBase64Convert()
 {
     return(Base64Convert.Decode(_data));
 }