async fn receiving<PK: PublicKey, D: Data, S: AsyncRead + Unpin + Send>(
    stream: S,
    data_for_user: UnboundedSender<D>
) -> Result<(), ProtocolError<PK>>