/// <summary> /// Получение сообщения от пользователя. Если от пользователя нет сообщений, то ждёт <see cref="Timeout"/>. /// </summary> /// <param name="userId">Идентификатор пользователя, от которого мы ждём сообщение.</param> /// <param name="token">Билет отмены ожидания.</param> /// <returns>Прочитанный объект.</returns> /// <exception cref="System.OperationCanceledException">Происходит, когда превышено время <see cref="Timeout"/>.</exception> public dynamic Read(ulong userId, CancellationToken token = default) { server.DebugInfo($"{this}.Read = {userId}, {token}"); if (token == default) { token = new CancellationTokenSource(Timeout).Token; } return(GetUserMessages(userId).Take(token)); }
/// <summary> /// Создаёт новый экземпляр клиента получателя и отправителя сообщений. /// </summary> /// <param name="server">Сервер, с помощью которого отправляются и получаются пакеты.</param> /// <param name="timeout">Максимальный интервал ожидания для получения пакета.</param> public SimpleWriterReader(P2PClient server, TimeSpan timeout = default) { server.DebugInfo($"{this}.SimpleWriterReader = {server}, {timeout}"); if (timeout != default) { Timeout = timeout; } this.server = server; server.OnMessageSend += OnMessageSend; server.OnDisconnect += OnUserDisconnect; }
private void OnMessageSend(P2PClient server, ulong userId, Memory <byte> Package) { server.DebugInfo($"{this}.OnMessageSend = {server}, {userId}, {string.Join(", ", Package)}"); GetUserMessages(userId).Add(Package); }