Я использую Rx для подключения к сокету и получения данных.У меня проблема в том, что после подключения к сокету мне необходимо отправить данные для авторизации, прежде чем данные могут быть получены.
Соединение
public static IObservable<Unit> WhenConnected(this Socket socket, IPAddress address, int port)
{
return Observable.FromAsyncPattern<IPAddress, int>(
socket.BeginConnect,
socket.EndConnect)(address, port);
}
ПолучениеДанные
Не будет публиковать весь код, но в итоге он использует TakeWhile для многократного получения байтов от асинхронных методов Начало / Конец приема.
var receiveData = Observable.FromAsyncPattern
<byte[], int, int, SocketFlags, int>(socket.BeginReceive, socket.EndReceive);
Вопрос 1:
Теперь моя проблема в том, как мне построить свою подписку?
var query = from _ in socket.WhenConnected(IPAddress.Parse(_host), _port)
//need to authorize before receiving data
from value socket.DataReceived().Repeat()
select value;
using (query.Subscribe(...
Вопрос 2
Обычно я отправляюпакеты информации, используя NetworkStream, а не Socket, так что мне нужно сделать что-то совершенно другое?