1717import java .util .HashMap ;
1818import java .util .Map ;
1919import java .util .Optional ;
20+ import java .util .concurrent .ConcurrentHashMap ;
2021import javax .websocket .CloseReason ;
2122import javax .websocket .OnClose ;
2223import javax .websocket .OnError ;
@@ -39,6 +40,7 @@ public abstract class BasicWebSocketEndpoint {
3940 private final MessagesReSender reSender ;
4041 private final WebSocketMessageReceiver receiver ;
4142 private final WebsocketIdService identificationService ;
43+ private final Map <Session , StringBuffer > sessionMessagesBuffer = new ConcurrentHashMap <>();
4244
4345 public BasicWebSocketEndpoint (
4446 WebSocketSessionRegistry registry ,
@@ -63,9 +65,22 @@ public void onOpen(Session session) {
6365
6466 registry .add (combinedEndpointId , session );
6567 reSender .resend (combinedEndpointId );
68+ sessionMessagesBuffer .put (session , new StringBuffer ());
6669 }
6770
6871 @ OnMessage
72+ public void onMessage (String messagePart , boolean last , Session session ) {
73+ StringBuffer buffer = sessionMessagesBuffer .get (session );
74+ buffer .append (messagePart );
75+ if (last ) {
76+ try {
77+ onMessage (buffer .toString (), session );
78+ } finally {
79+ buffer .setLength (0 );
80+ }
81+ }
82+ }
83+
6984 public void onMessage (String message , Session session ) {
7085 Optional <String > endpointIdOptional = registry .get (session );
7186
@@ -98,6 +113,7 @@ public void onClose(CloseReason closeReason, Session session) {
98113 LOG .debug ("Close reason: {}:{}" , closeReason .getReasonPhrase (), closeReason .getCloseCode ());
99114
100115 registry .remove (combinedEndpointId );
116+ sessionMessagesBuffer .remove (session );
101117 } else {
102118 LOG .warn ("Closing unidentified session" );
103119 }
0 commit comments