SignalStream holds the connection to the websocket. It can be replaced at each connection
- handle ping message - recv now only returns on SignalResponse