/// <summary> /// Exchange messages with the server and return true if a message has /// been received. /// </summary> public bool CheckReceive() { Debug.Assert(transport != null, "transfert can't be null"); Debug.Assert(transport.IsReceiving || transport.DoneReceiving); if (transport.IsSending || transport.IsReceiving) { transport.DoXfer(); } return(transport.DoneReceiving); }
/// <summary> /// Send a message on the tunnel. /// </summary> protected void SendAnpMsg(AnpMsg m) { AnpTransport transfer = InternalAnpTunnel.GetTransport(); Debug.Assert(transfer.IsReceiving || transfer.DoneReceiving); Debug.Assert(!transfer.IsSending); transfer.SendMsg(m); while (transfer.IsSending) { transfer.DoXfer(); if (transfer.IsSending) { SelectSockets set = new SelectSockets(); InternalAnpTunnel.UpdateSelect(set); Block(set); } } }
/// <summary> /// Retrieve a message from the tunnel. /// </summary> protected AnpMsg GetAnpMsg() { AnpTransport transfer = InternalAnpTunnel.GetTransport(); Debug.Assert(transfer.IsReceiving || transfer.DoneReceiving); Debug.Assert(!transfer.IsSending); while (!transfer.DoneReceiving) { transfer.DoXfer(); if (!transfer.DoneReceiving) { SelectSockets set = new SelectSockets(); InternalAnpTunnel.UpdateSelect(set); Block(set); } } AnpMsg msg = transfer.GetRecv(); transfer.BeginRecv(); return(msg); }