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 }