# 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 ] ```
| ```clafer WebSocket1 states ready ``` | ```clafer WebSocket2 request->open success states ready ``` | ```clafer WebSocket3 states opened ``` | ```clafer WebSocket4 request->close success states opened ``` | ```clafer WebSocket5 states closed ``` | ```clafer WebSocket6 states closed ``` |
| |WebSocket | |WebSocket | |WebSocket | |WebSocket | |WebSocket | |WebSocket |
| | | | request->open | | | | request->close | | | | |
| | | | success | | | | failure | | | | |
| | ready | | ready | | opened | | | | failed | | failed |
| |WebSocket | |WebSocket | |WebSocket | |WebSocket |
| | | | request->open | | | | |
| | | | failure | | | | |
| | ready | | ready | | failed | | failed |