# 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 ```
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 ] ```
```clafer <<<<<<< edited WebSocket7 ======= WebSocket6 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa states ready ``` ```clafer <<<<<<< edited WebSocket8 ======= WebSocket7 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa request->open success states ready ``` ```clafer <<<<<<< edited WebSocket9 ======= WebSocket8 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa states opened ``` ```clafer <<<<<<< edited WebSocket10 ======= WebSocket9 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa request->close failed states opened ``` ```clafer <<<<<<< edited WebSocket11 ======= WebSocket10 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa states failed ``` ```clafer <<<<<<< edited WebSocket12 ======= WebSocket11 >>>>>>> ec5473b372ac1209325b03fa234f1fe6f0e7b2fa states failed ```
3. Web socket failed to be opened ```clafer webSocketFailed : WebSocket [ ready --> request=open && request.failure --> failed --> failed ] ```
|WebSocket|WebSocket|WebSocket|WebSocket
||  request->open||
||    failure||
|  ready|  ready|  failed|  failed