# Simplified Web Socket Protocol ```clafer enum Request = open | close abstract WebSocket xor request -> Request ? success failure xor states initial ready [ initially no request ] [ request=open -[request.success]-> opened ] [ request=open -[request.failure]-> failed ] opened [ initially no request ] [ request=close -[request.success]-> closed ] [ request=close -[request.failure]-> failed ] closed --> closed [ no request ] failed --> failed [ no request ] ``` ## Example scenarios 1. Web socket successfully opened and closed ```clafer webSocketOpenedClosed : WebSocket [ ready --> request=open && request.success --> opened -->> request=close && request.success --> closed --> closed ] ```
|WebSocketWebSocket|WebSocket|WebSocket|WebSocket|WebSocket
|  request->open||  request->close||
|    success|    success||
|  ready|  ready|  opened||  closed|  closed
2. Web socket successfully opened but failed to be closed ```clafer webSocketOpenedFailed : WebSocket [ ready --> request=open && request.success --> opened -->> request=close && request.failure --> failed --> failed ] ```
WebSocketWebSocketWebSocketWebSocketWebSocketWebSocket
  request->open  request->close
    success    failure
  ready  ready  opened  failed  failed
3. Web socket failed to be opened ```clafer webSocketFailed : WebSocket [ ready --> request=open && request.failure --> failed --> failed ] ```
WebSocketWebSocketWebSocketWebSocket
  request->open
    failure
  ready  ready  failed  failed