protected override void OnReceived(byte[] buffer, long offset, long size) { // Turn into string var serverMessage = Encoding.UTF8.GetString(buffer, (int)offset, (int)size); // JSON deserialize into server result model var serverResult = JsonSerializer.Deserialize <ServerResult>(serverMessage); switch (serverResult.Status) { case StatusCode.Failure: var failedItem = AwaitingResponseItems.Find(e => e.Id == serverResult.ElementId.Value); ToBeSentQueue.Enqueue(failedItem); AwaitingResponseItems.Remove(failedItem); Console.BackgroundColor = ConsoleColor.Red; break; case StatusCode.Success: var successfullItem = AwaitingResponseItems.Find(e => e.Id == serverResult.ElementId.Value); AwaitingResponseItems.Remove(successfullItem); break; } Console.WriteLine($"Server message:\n{serverResult}"); Console.BackgroundColor = ConsoleColor.White; }
public void SendAsync(DataModel model) { // Enqueue the current model that's about to be sent ToBeSentQueue.Enqueue(model); // If there are items in the queue, send some of them first for (int i = 0; i < ITEMS_TO_DEQUEUE; i++) { if (ToBeSentQueue.TryDequeue(out DataModel dequeuedModel)) { // And send the model that has been waiting in the queue AwaitingResponseItems.Add(dequeuedModel); var serializedModel = JsonSerializer.Serialize(dequeuedModel); base.SendAsync(serializedModel); } else { break; } } }