/// <summary> /// Attempts to process the command if it was received in full. /// </summary> /// <param name="data">Received from the client so far</param> /// <param name="cancellation">Cancellation token</param> /// <returns>A <see cref="Task"/> that represents an asynchronous operation.</returns> protected sealed override async Task OnData(ArrayBuffer data, CancellationToken cancellation) { if (data.EndsWith(lineFeed)) { data.TrimEnd(lineFeed.Length); LogRequest(data); var commandLength = data.CountUntil(argumentCommandSeparator); var argumentsLength = data.Length - commandLength - 1; await OnCommand( data.ToString(0, commandLength, Encoding.ASCII), argumentsLength > 0 ?data.GetView(commandLength + 1, argumentsLength) : ArrayBufferView.Empty, cancellation); data.Clear(); } }
private void AddWordToDictionary(Dictionary <string, WordCount> wordsCountList, ArrayBuffer <char> wordBuffer, string sourceLang, string targetLang) { var word = new string(wordBuffer.ToArray()); word = word.ToLower(); if (string.IsNullOrWhiteSpace(word)) { return; } if (wordsCountList.ContainsKey(word)) { wordsCountList[word].Increment(); } else { var translation = _translatorService.Translate(word, sourceLang, targetLang).Result; wordsCountList.Add(word, new WordCount(word, translation)); } wordBuffer.Clear(); }
public void TestArrayBuffers() { ArrayBuffer <byte> buffer = new ArrayBuffer <byte>(256); Assert.AreEqual(256, buffer.Capacity); for (int i = 0; i < 10; i++) { buffer.Add((byte)i); } for (int i = 0; i < 10; i++) { buffer.Add((byte)i); } Assert.AreEqual(20, buffer.Count); for (int i = 0; i < 10; i++) { Assert.AreEqual(i, buffer.Remove()); } Assert.AreEqual(10, buffer.Count); for (int i = 0; i < 10; i++) { Assert.AreEqual(i, buffer[i]); } byte[] bytes = new byte[10]; buffer.Remove(bytes, 0, bytes.Length); for (int i = 0; i < 10; i++) { Assert.AreEqual(i, bytes[i]); } Assert.AreEqual(0, buffer.Count); buffer.AddRange(bytes); buffer.AddRange(bytes, 0, bytes.Length); Assert.AreEqual(20, buffer.Count); for (int i = 0; i < 20; i++) { Assert.AreEqual(i % 10, buffer[i]); } Assert.IsTrue(buffer.Contains(5)); Assert.AreEqual(5, buffer.IndexOf(5)); Assert.IsFalse(buffer.Contains(20)); Assert.AreEqual(-1, buffer.IndexOf(20)); buffer.CopyTo(5, bytes, 0, 5); for (int i = 0; i < 5; i++) { Assert.AreEqual(i + 5, bytes[i]); } buffer.Remove(15); Assert.AreEqual(5, buffer.Count); for (int i = 0; i < 5; i++) { Assert.AreEqual(i + 5, buffer[i]); } List <byte> list = new List <byte>(buffer); for (int i = 0; i < 5; i++) { Assert.AreEqual(i + 5, list[i]); } Array.Clear(bytes, 0, bytes.Length); buffer.CopyTo(bytes, 0); for (int i = 0; i < 5; i++) { Assert.AreEqual(i + 5, bytes[i]); } byte[] array = buffer.GetZeroOffsetArray(); for (int i = 0; i < 5; i++) { Assert.AreEqual(i + 5, array[i]); } buffer.Clear(); Assert.AreEqual(0, buffer.Count); buffer.EnsureCapacity(200); Assert.AreEqual(256, buffer.Capacity); buffer.EnsureCapacity(300); Assert.AreEqual(300, buffer.Capacity); buffer.AddCount(250); Assert.AreEqual(250, buffer.Count); array = buffer.GetArrayForWriting(100); Assert.IsTrue(array.Length >= 350); buffer.Remove(100); Assert.AreEqual(150, buffer.Count); Assert.AreEqual(100, buffer.GetRawIndex(0)); Assert.AreEqual(250, buffer.GetRawIndex(buffer.Count)); Assert.AreEqual(0, buffer.GetLogicalIndex(100)); Assert.AreEqual(buffer.Count, buffer.GetLogicalIndex(250)); buffer.SetCount(1); Assert.AreEqual(1, buffer.Count); Assert.AreEqual(100, buffer.Offset); buffer.GetZeroOffsetArray(); Assert.AreEqual(0, buffer.Offset); }