/// <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(); } }
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); }
private static void Play(CacheBuffer cache) { if (!_status) { _status = true; Task.Run(() => AudioPlay()); Console.WriteLine($"[{DateTime.Now.ToString()}]开始播放..."); } lock (_cacheLocker) { _cache.Enqueue(cache); } }
/// <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); }
/// <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(); } }
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; } }
public PresentBuffer(CacheBuffer cacheBuffer) { _cacheBuffer = cacheBuffer; }