1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.jsr356.messages;
20
21 import java.io.IOException;
22 import java.nio.ByteBuffer;
23
24 import javax.websocket.MessageHandler;
25 import javax.websocket.MessageHandler.Partial;
26
27 import org.eclipse.jetty.util.BufferUtil;
28 import org.eclipse.jetty.websocket.common.message.MessageAppender;
29 import org.eclipse.jetty.websocket.jsr356.MessageHandlerWrapper;
30
31
32
33
34 public class BinaryPartialMessage implements MessageAppender
35 {
36 private final MessageHandlerWrapper msgWrapper;
37 private final MessageHandler.Partial<Object> partialHandler;
38
39 @SuppressWarnings("unchecked")
40 public BinaryPartialMessage(MessageHandlerWrapper wrapper)
41 {
42 this.msgWrapper = wrapper;
43 this.partialHandler = (Partial<Object>)wrapper.getHandler();
44 }
45
46 @Override
47 public void appendFrame(ByteBuffer payload, boolean isLast) throws IOException
48 {
49
50
51
52 if (msgWrapper.isMessageType(ByteBuffer.class))
53 {
54 partialHandler.onMessage(payload==null?BufferUtil.EMPTY_BUFFER:
55 payload.slice(),isLast);
56 return;
57 }
58
59
60 if (msgWrapper.isMessageType(byte[].class))
61 {
62 partialHandler.onMessage(payload==null?new byte[0]:
63 BufferUtil.toArray(payload),isLast);
64 return;
65 }
66
67 StringBuilder err = new StringBuilder();
68 err.append(msgWrapper.getHandler().getClass());
69 err.append(" does not implement an expected ");
70 err.append(MessageHandler.Partial.class.getName());
71 err.append(" of type ");
72 err.append(ByteBuffer.class.getName());
73 err.append(" or byte[]");
74 throw new IllegalStateException(err.toString());
75 }
76
77 @Override
78 public void messageComplete()
79 {
80
81 }
82 }