示例#1
0
        /// <summary>
        /// 开始拆包判断,当尚未进入数据缓冲状态
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public virtual void DataBufferReceiving(byte[] buffer)
        {
            if (!DataReceiving)
            {
                if (buffer[0] == StartFlag)
                {
                    DataReceiving = true;
                    CacheBuffer   = new List <byte>();
                }
                else
                {
                    int _cmdWordIndex = FindedCommandWords(buffer);

                    if (_cmdWordIndex > 0)
                    {
                        DataReceiving = true;
                        CacheBuffer   = new List <byte>();
                        buffer        = ArrayHelper.Copy(buffer, _cmdWordIndex, buffer.Length);
                    }
                }
            }

            if (DataReceiving)
            {
                CacheBuffer.AddRange(buffer);
                VerifyingPacketData();
            }
            else
            {
                ResetDataReceived();
            }
        }
示例#2
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            IAzureTokenCache cache = value as IAzureTokenCache;

            if (cache != null)
            {
                if (_serializeCache)
                {
                    byte[] cacheData = null;

                    if (AzureSession.Instance.TryGetComponent(
                            PowerShellTokenCacheProvider.PowerShellTokenCacheProviderKey,
                            out PowerShellTokenCacheProvider tokenCacheProvider))
                    {
                        cacheData = tokenCacheProvider.ReadTokenData();
                    }
                    value = new CacheBuffer {
                        CacheData = cacheData
                    };
                }
                else
                {
                    value = new CacheBuffer();
                }
            }

            serializer.Serialize(writer, value);
        }
        private void OpenFile(string path)
        {
            _largeFile = new LargeFile(path);
            CacheBuffer cacheBuffer = new CacheBuffer(_largeFile);

            _presentBuffer = new PresentBuffer(cacheBuffer);
            _presentBuffer.EncodingName = EncodingName;
            _presentBuffer.Read(0);
            Text = _presentBuffer.Text;
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            IAzureTokenCache cache = value as IAzureTokenCache;

            if (cache != null)
            {
                value = new CacheBuffer {
                    CacheData = cache.CacheData
                };
            }

            serializer.Serialize(writer, value);
        }
示例#5
0
 private static void Play(CacheBuffer cache)
 {
     if (!_status)
     {
         _status = true;
         Task.Run(() => AudioPlay());
         Console.WriteLine($"[{DateTime.Now.ToString()}]开始播放...");
     }
     lock (_cacheLocker)
     {
         _cache.Enqueue(cache);
     }
 }
示例#6
0
        /// <summary>
        /// 判断协议长度,并返回符合协议要求得完整报文
        /// </summary>
        /// <param name="checkedCrc">是否检查CRC</param>
        /// <returns>完整报文</returns>
        protected virtual byte[] VerifyingPacketDataLength(out bool checkedCrc)
        {
            checkedCrc = false;
            byte[] _packetDataBuffer  = null;
            int    _dataPackageLength = unPackageProtocol.GetProtocolLengthSection(CacheBuffer);

            if ((_dataPackageLength + ProtocolMinCount) <= CacheBuffer.Count)
            {
                _packetDataBuffer = ArrayHelper.Copy <byte>(CacheBuffer.ToArray(), 0, _dataPackageLength + ProtocolMinCount);
                checkedCrc        = true;
            }

            return(_packetDataBuffer);
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            IAzureTokenCache cache = value as IAzureTokenCache;

            if (cache != null)
            {
                if (_serializeCache)
                {
                    byte[] cacheData = null;


                    if (AzureSession.Instance.TryGetComponent(nameof(PowerShellTokenCache), out PowerShellTokenCache tokenCache))
                    {
                        if (tokenCache.IsPersistentCache)
                        {
                            if (AzureSession.Instance.TryGetComponent(
                                    PowerShellTokenCacheProvider.PowerShellTokenCacheProviderKey,
                                    out PowerShellTokenCacheProvider tokenCacheProvider))
                            {
                                cacheData = tokenCacheProvider.ReadTokenData();
                            }
                        }
                        else
                        {
                            using (var stream = new MemoryStream())
                            {
                                tokenCache.Serialize(stream);
                                cacheData = stream.ToArray();
                            }
                        }
                    }

                    value = new CacheBuffer {
                        CacheData = cacheData
                    };
                }
                else
                {
                    value = new CacheBuffer();
                }
            }

            serializer.Serialize(writer, value);
        }
示例#8
0
        /// <summary>
        /// 分片转写
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private async void StartConvert()
        {
            try
            {
                Stopwatch stopwatch        = new Stopwatch();
                bool      isStart          = false;
                long      lastDataTimespan = 0;
                int       connectOutTime   = 60;
                int       sendDataOutTime  = 8;

                while (Status != ServiceStatus.Stopped)
                {
                    CacheBuffer data = null;

                    lock (_cacheLocker)
                    {
                        if (_cache.Count > 0)
                        {
                            data             = _cache.Dequeue();
                            lastDataTimespan = stopwatch.ElapsedMilliseconds;
                        }
                    }

                    if (data == null)
                    {
                        if ((stopwatch.ElapsedMilliseconds / 1000 > connectOutTime) || ((stopwatch.ElapsedMilliseconds - lastDataTimespan) / 1000 > sendDataOutTime))
                        {
                            data = new CacheBuffer(new byte[1] {
                                0
                            }, true);
                        }
                        else
                        {
                            continue;
                        }
                    }

                    if (!isStart)
                    {
                        stopwatch.Start();
                        isStart = true;
                    }

                    ResultModel <string> fragmentResult;
                    if (data.IsEnd || (stopwatch.ElapsedMilliseconds / 1000 > connectOutTime) || ((stopwatch.ElapsedMilliseconds - lastDataTimespan) / 1000 > sendDataOutTime))
                    {
                        data.IsEnd = true;
                        if (data.Data == null)
                        {
                            data.Data = new byte[1] {
                                0
                            }
                        }
                        ;
                        fragmentResult = await DoFragmentAsr(data.Data, FrameState.Last);
                    }
                    else
                    {
                        if (data.Data == null)
                        {
                            continue;
                        }
                        fragmentResult = await DoFragmentAsr(data.Data);
                    }
                    if (fragmentResult.Code == ResultCode.Disconnect)
                    {
                        OnError?.Invoke(this, new ErrorEventArgs()
                        {
                            Code      = ResultCode.Warning,
                            Message   = fragmentResult.Message,
                            Exception = new Exception(fragmentResult.Message),
                        });
                        break;
                    }
                    else if (fragmentResult.Code != ResultCode.Success)
                    {
                        string message = $"Recognition data failed. {fragmentResult.Message}";

                        OnError?.Invoke(this, new ErrorEventArgs()
                        {
                            Code      = ResultCode.Warning,
                            Message   = message,
                            Exception = new Exception(message),
                        });
                    }
                    if (data.IsEnd)
                    {
                        break;
                    }
                }
                stopwatch.Stop();
            }
            catch (Exception ex)
            {
                OnError?.Invoke(this, new ErrorEventArgs()
                {
                    Code      = ResultCode.Warning,
                    Message   = ex.Message,
                    Exception = new Exception(ex.Message),
                });
            }
            finally
            {
                ResetState();
            }
        }
示例#9
0
        private static async void AudioPlay()
        {
            try
            {
                bool isEnd = false;
                using WaveOutEvent wo = new WaveOutEvent();
                BufferedWaveProvider rs = new BufferedWaveProvider(new WaveFormat(16000, 1))
                {
                    BufferLength            = 10240000, //针对长文本,请标准缓冲区足够大
                    DiscardOnBufferOverflow = true
                };
                wo.Init(rs);
                wo.Play();

                while (_status && !isEnd)
                {
                    CacheBuffer data = null;
                    lock (_cacheLocker)
                    {
                        if (_cache.Count == 0)
                        {
                            continue;
                        }
                        data = _cache.Dequeue();
                    }
                    if (data == null)
                    {
                        continue;
                    }
                    if (data.Data != null)
                    {
                        rs.AddSamples(data.Data, 0, data.Data.Length);
                    }
                    if (isEnd = data.IsEnd)
                    {
                        break;
                    }
                }
                while (wo.PlaybackState == PlaybackState.Playing)
                {
                    await Task.Delay(1);

                    if (rs.BufferedBytes == 0 && isEnd)
                    {
                        await Task.Delay(300);

                        wo.Stop();
                        wo.Dispose();
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                lock (_cacheLocker)
                {
                    _cache.Clear();
                }
                _status = false;
            }
        }
示例#10
0
 public PresentBuffer(CacheBuffer cacheBuffer)
 {
     _cacheBuffer = cacheBuffer;
 }