# 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 ### Web socket successfully opened and closed ```clafer webSocketOpenedClosed : WebSocket [ ready --> request=open && request.success --> opened -->> request=close && request.success --> closed --> closed ] ``` #### Trace 1
```clafer WebSocket11 states ready ``` ```clafer WebSocket12 request->open success states ready ``` ```clafer WebSocket13 states opened ``` ```clafer WebSocket14 request->close success states opened ``` ```clafer WebSocket15 states closed ``` ```clafer WebSocket16 states closed ```
### Web socket successfully opened but failed to be closed ```clafer webSocketOpenedFailed : WebSocket [ ready --> request=open && request.success --> opened -->> request=close && request.failure --> failed --> failed ] ``` #### Trace 2
```clafer WebSocket21 states ready ``` ```clafer WebSocket22 request->open success states ready ``` ```clafer WebSocket23 states opened ``` ```clafer WebSocket24 request->close failure states opened ``` ```clafer WebSocket25 states failed ``` ```clafer WebSocket26 states failed ```
### Web socket failed to be opened ```clafer webSocketFailed : WebSocket [ ready --> request=open && request.failure --> failed --> failed ] ``` #### Trace 3
```clafer WebSocket31 states ready ``` ```clafer WebSocket32 request->open failure states ready ``` ```clafer WebSocket33 states failed ``` ```clafer WebSocket34 states failed ```