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 javax.websocket.DecodeException;
22 import javax.websocket.Decoder;
23 import javax.websocket.Decoder.Binary;
24 import javax.websocket.MessageHandler;
25 import javax.websocket.MessageHandler.Whole;
26
27 import org.eclipse.jetty.util.BufferUtil;
28 import org.eclipse.jetty.websocket.api.WebSocketException;
29 import org.eclipse.jetty.websocket.common.events.EventDriver;
30 import org.eclipse.jetty.websocket.common.message.SimpleBinaryMessage;
31 import org.eclipse.jetty.websocket.jsr356.DecoderFactory;
32 import org.eclipse.jetty.websocket.jsr356.MessageHandlerWrapper;
33
34 public class BinaryWholeMessage extends SimpleBinaryMessage
35 {
36 private final MessageHandlerWrapper msgWrapper;
37 private final MessageHandler.Whole<Object> wholeHandler;
38
39 @SuppressWarnings("unchecked")
40 public BinaryWholeMessage(EventDriver onEvent, MessageHandlerWrapper wrapper)
41 {
42 super(onEvent);
43 this.msgWrapper = wrapper;
44 this.wholeHandler = (Whole<Object>)wrapper.getHandler();
45 }
46
47 @SuppressWarnings("unchecked")
48 @Override
49 public void messageComplete()
50 {
51 super.finished = true;
52
53 byte data[] = out.toByteArray();
54
55 DecoderFactory.Wrapper decoder = msgWrapper.getDecoder();
56 Decoder.Binary<Object> binaryDecoder = (Binary<Object>)decoder.getDecoder();
57 try
58 {
59 Object obj = binaryDecoder.decode(BufferUtil.toBuffer(data));
60 wholeHandler.onMessage(obj);
61 }
62 catch (DecodeException e)
63 {
64 throw new WebSocketException("Unable to decode binary data",e);
65 }
66 }
67 }