private static async IAsyncEnumerator <ReadOnlySequence <byte> > ShopLists(CancellationToken cancellationToken) { await Task.CompletedTask; var serializer = new DataContractHessianSerializer(typeof(AggregatedChanges)); var lists = new[] { "Lorem ipsum dolor sit amet", "Consectetur adipiscing elit", "Sed do eiusmod tempor incididunt" }; foreach (var list in lists) { var description = new ShopListInfo { Title = list }; using (var stream = new MemoryStream()) { serializer.WriteObject(stream, description); yield return(new ReadOnlySequence <byte>(stream.ToArray())); } } }
private static TPacket LoadPacketContent <TPacket>(Stream stream) where TPacket : IIncomingPacket { var serializer = new DataContractHessianSerializer(typeof(TPacket)); return((TPacket)serializer.ReadObject(stream)); }
private static byte[] GetSerializedPacket <TPacket>(TPacket packet) where TPacket : IOutgoingPacket { using (var buffer = new MemoryStream()) { var serializer = new DataContractHessianSerializer(typeof(TPacket)); serializer.WriteObject(buffer, packet); return(buffer.ToArray()); } }
public Task SendAsync(string text) { ArraySegment <byte> data; using (var stream = new MemoryStream()) { var serializer = new DataContractHessianSerializer(typeof(IncomingChatMessage), settings); serializer.WriteObject(stream, new IncomingChatMessage { Author = principal.Identity.Name, Content = text }); data = new ArraySegment <byte>(stream.ToArray()); } return(socket.SendAsync(data, WebSocketMessageType.Binary, true, CancellationToken.None)); }
public void StartReceive() { var ct = cts.Token; receive = Task.Run(async() => { while (WebSocketState.Open == socket.State) { ArraySegment <byte> data; WebSocketReceiveResult result; using (var stream = new MemoryStream()) { var buffer = new ArraySegment <byte>(new byte[8192]); do { result = await socket.ReceiveAsync(buffer, ct); await stream.WriteAsync(buffer.Array, buffer.Offset, result.Count, ct); } while (false == result.EndOfMessage); ct.ThrowIfCancellationRequested(); data = new ArraySegment <byte>(stream.ToArray()); } if (0 < data.Count && WebSocketMessageType.Binary == result.MessageType) { OutgoingChatMessage message; using (var stream = new MemoryStream(data.Array)) { var serializer = new DataContractHessianSerializer(typeof(OutgoingChatMessage), settings); message = serializer.ReadObject(stream) as OutgoingChatMessage; } MessageArrived?.Invoke(this, new ChatMessageEventArgs(message)); } } }, ct); }
private Task OnStreamMessage(ChatMessage message, StreamSequenceToken sst) { ArraySegment <byte> data; using (var memoryStream = new MemoryStream()) { var serializer = new DataContractHessianSerializer(typeof(OutgoingChatMessage), settings); serializer.WriteObject(memoryStream, new OutgoingChatMessage { Author = message.Author, Content = message.Content, Created = message.Created }); data = new ArraySegment <byte>(memoryStream.ToArray()); } var tasks = new List <Task>(); var registeredSockets = registry[roomId]; var sockets = registeredSockets.ToArray(); sockets.AsParallel().ForAll(socket => { try { logger.LogDebug($"[ChatRoomWebSocketHandler.OnStreamMessage] Sending data length: {data.Count}"); var task = socket.SendAsync(data, WebSocketMessageType.Binary, true, CancellationToken.None); tasks.Add(task); } catch (WebSocketException exception) { Console.WriteLine(exception); registeredSockets.Remove(socket); } }); return(Task.WhenAll(tasks)); }
public override Task OnMessageAsync(WebSocket webSocket, WebSocketMessageType messageType, ArraySegment <byte> data) { if (WebSocketMessageType.Binary != messageType) { logger.LogDebug($"Unsupported message type: {messageType}"); return(Task.CompletedTask); } IncomingChatMessage message; using (var memoryStream = new MemoryStream(data.Array)) { var serializer = new DataContractHessianSerializer(typeof(IncomingChatMessage), settings); message = (IncomingChatMessage)serializer.ReadObject(memoryStream); } return(stream.OnNextAsync(new ChatMessage { Author = message.Author, Content = message.Content, Created = DateTime.UtcNow })); }
protected override void Arrange() { Serializer = new DataContractHessianSerializer(Data.GetType(), settings: null); }