visitor_data(?Visitor, ?Data)[private]
 wsid_status(?WSID, ?Status)[private]
 wsid_session(?WSID, ?SessionId)[private]
 session_user(?Session, ?TmpUser)[private]
 visitor_data(?TmpUser, ?UserData:dict)[private]
 subscription(?WSID, ?Channel, ?SubChannel)[private]
These predicates represent our notion of visitors. Active modes:
Arguments:
WSID- is the identifier of the web socket. As we may have to reconnect lost connections, this is may be replaced.
Session- is the session identifier. This is used to connect SWISH actions to WSIDs.
TmpUser- is the ID with which we identify the user for this run. The value is a UUID and thus doesn't reveal the real identity of the user.
UserData- is a dict that holds information about the real user identity. This can be empty if no information is known about this user.
Status- is one of unload or lost(Time)
Channel- is an atom denoting a chat channel
SubChannel- is a related sub channel.
 wsid_status(+WSID, -Status)[private]
Status is one of lost(Time) if we lost contact at Time or unload if the websocket was cleanly disconnected.

The Redis version keeps two keys per WSID as described below. Note that these keys only exist on temporary lost or disconnecting websockets.