1 module hunt.http.codec.websocket.stream.AbstractWebSocketBuilder;
2 
3 import hunt.http.codec.websocket.stream.WebSocketConnection;
4 
5 import hunt.http.codec.websocket.frame.DataFrame;
6 import hunt.http.codec.websocket.frame.Frame;
7 import hunt.lang.common;
8 
9 import hunt.container.ByteBuffer;
10 
11 /**
12  * 
13  */
14 abstract class AbstractWebSocketBuilder {
15 
16     protected Action2!(string, WebSocketConnection) _textHandler;
17     protected Action2!(ByteBuffer, WebSocketConnection) _dataHandler;
18     protected Action2!(Throwable, WebSocketConnection) _errorHandler;
19 
20     AbstractWebSocketBuilder onText(Action2!(string, WebSocketConnection) handler) {
21         this._textHandler = handler;
22         return this;
23     }
24 
25     AbstractWebSocketBuilder onData(Action2!(ByteBuffer, WebSocketConnection) handler) {
26         this._dataHandler = handler;
27         return this;
28     }
29 
30     AbstractWebSocketBuilder onError(Action2!(Throwable, WebSocketConnection) handler) {
31         this._errorHandler = handler;
32         return this;
33     }
34 
35     void onFrame(Frame frame, WebSocketConnection connection) {
36         switch (frame.getType()) {
37             case FrameType.TEXT:
38                 if(_textHandler !is null)
39                     _textHandler((cast(DataFrame) frame).getPayloadAsUTF8(), connection);
40                 break;
41             case FrameType.CONTINUATION:
42             case FrameType.BINARY:
43                 if(_dataHandler !is null)
44                     _dataHandler(frame.getPayload(), connection);
45                 break;
46 
47             default: break;
48         }
49     }
50 
51     void onError(Throwable t, WebSocketConnection connection) {
52         if(_errorHandler !is null)
53             _errorHandler(t, connection);
54     }
55 }