--- title: Behavioral Modeling - WebSocket Protocol ... # Simplified Web Socket Protocol > Note: this is a contrived example, not the actual protocol. ```clafer enum Request = open | close abstract WebSocket 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 ] xor request -> Request ? success failure ``` ## 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 states ready request->open success ``` | ```clafer WebSocket13 states opened ``` | ```clafer WebSocket14 states opened request->close success ``` | ```clafer WebSocket15 states closed ``` | ```clafer WebSocket16 states closed ``` |
| ```clafer WebSocket21 states ready ``` | ```clafer WebSocket22 states ready request->open success ``` | ```clafer WebSocket23 states opened ``` | ```clafer WebSocket24 states opened request->close failure ``` | ```clafer WebSocket25 states failed ``` | ```clafer WebSocket26 states failed ``` |
| ```clafer WebSocket31 states ready ``` | ```clafer WebSocket32 states ready request->open failure ``` | ```clafer WebSocket33 states failed ``` | ```clafer WebSocket34 states failed ``` |