|
1 | 1 |
|
2 | 2 | var WebSocketJS = |
3 | 3 | { |
4 | | - $RECEIVER_NAME:{}, |
5 | | - $OPEN_METHOD_NAME:{}, |
6 | | - $CLOSE_METHOD_NAME:{}, |
7 | | - $RECEIVE_METHOD_NAME:{}, |
8 | | - $RECEIVE_STRING_METHOD_NAME:{}, |
9 | | - $ERROR_METHOD_NAME:{}, |
| 4 | + $RECEIVER_NAME: {}, |
| 5 | + $OPEN_METHOD_NAME: {}, |
| 6 | + $CLOSE_METHOD_NAME: {}, |
| 7 | + $MESSAGE_METHOD_NAME: {}, |
| 8 | + $ERROR_METHOD_NAME: {}, |
10 | 9 | $webSocketMap: {}, |
11 | 10 |
|
12 | 11 | $Initialize: function() |
|
15 | 14 | RECEIVER_NAME = "WebSocketReceiver"; |
16 | 15 | OPEN_METHOD_NAME = "OnOpen"; |
17 | 16 | CLOSE_METHOD_NAME = "OnClose"; |
18 | | - RECEIVE_METHOD_NAME = "OnReceive"; |
19 | | - RECEIVE_STRING_METHOD_NAME = "OnReceiveString"; |
| 17 | + MESSAGE_METHOD_NAME = "OnMessage"; |
20 | 18 | ERROR_METHOD_NAME = "OnError"; |
21 | 19 | }, |
22 | 20 |
|
|
37 | 35 | webSocket.onmessage = function(e) |
38 | 36 | { |
39 | 37 | if (e.data instanceof Blob) |
40 | | - OnMessage(address, e.data); |
41 | | - else if(typeOf event.data === String) {、 |
42 | | - OnMessageString(address, e.data); |
| 38 | + OnMessage(address, 2, e.data); |
| 39 | + else if(typeof e.data == 'string') |
| 40 | + OnMessage(address, 1, e.data); |
43 | 41 | else |
44 | | - OnError(address, "msg is not a blob instance"); |
| 42 | + OnError(address, "onmessage can not recognize msg type !"); |
45 | 43 | }; |
46 | 44 |
|
47 | 45 | webSocket.onopen = function(e) |
|
51 | 49 |
|
52 | 50 | webSocket.onclose = function(e) |
53 | 51 | { |
54 | | - OnClose(address); |
55 | | - if(e.code != 1000) |
56 | | - { |
57 | | - if(e.reason != null && e.reason.length > 0) |
58 | | - OnError(address, e.reason); |
59 | | - else |
60 | | - OnError(address, GetCloseReason(e.code)); |
61 | | - } |
| 52 | + OnClose(address, e.code, e.reason, e.wasClean); |
62 | 53 | }; |
63 | 54 |
|
64 | 55 | webSocket.onerror = function(e) |
65 | 56 | { |
66 | 57 | // can not catch the error reason, only use for debug. |
| 58 | + OnError(address, e.message); |
67 | 59 | }; |
68 | 60 |
|
69 | 61 | webSocketMap.set(address, webSocket); |
|
80 | 72 | }, |
81 | 73 |
|
82 | 74 | // call by unity |
83 | | - CloseJS: function (addressPtr) |
| 75 | + SendStrJS: function (addressPtr, msgPtr) |
84 | 76 | { |
85 | 77 | var address = Pointer_stringify(addressPtr); |
| 78 | + var msg = Pointer_stringify(msgPtr); |
86 | 79 | if(webSocketMap.has(address)) |
87 | | - webSocketMap.get(address).close(); |
| 80 | + webSocketMap.get(address).send(msg); |
88 | 81 | else |
89 | | - OnError(address, "close with a WebSocket not Instantiated"); |
| 82 | + OnError(address, "send msg with a WebSocket not Instantiated"); |
90 | 83 | }, |
91 | 84 |
|
92 | 85 | // call by unity |
93 | | - GetReadyStateJS: function (addressPtr) |
| 86 | + CloseJS: function (addressPtr) |
94 | 87 | { |
95 | 88 | var address = Pointer_stringify(addressPtr); |
96 | 89 | if(webSocketMap.has(address)) |
97 | | - webSocketMap.get(address).readyState; |
| 90 | + webSocketMap.get(address).close(); |
98 | 91 | else |
99 | | - OnError(address, "get readyState with a WebSocket not Instantiated"); |
| 92 | + OnError(address, "close with a WebSocket not Instantiated"); |
100 | 93 | }, |
101 | 94 |
|
102 | | - $OnMessageString: function(address, str) |
| 95 | + // call by unity |
| 96 | + GetReadyStateJS: function (addressPtr) |
103 | 97 | { |
104 | | - SendMessage(RECEIVER_NAME, RECEIVE_STRING_METHOD_NAME, str); |
| 98 | + var address = Pointer_stringify(addressPtr); |
| 99 | + if(!(webSocketMap instanceof Map)) |
| 100 | + return 0; |
| 101 | + if(webSocketMap.has(address)) |
| 102 | + return webSocketMap.get(address).readyState; |
| 103 | + return 0; |
105 | 104 | }, |
106 | 105 |
|
107 | | - $OnMessage: function(address, blobData) |
| 106 | + $OnMessage: function(address, opcode, data) |
108 | 107 | { |
109 | | - var reader = new FileReader(); |
110 | | - reader.addEventListener("loadend", function() |
| 108 | + var addr_opcode_data = address + "_" + opcode + "_"; |
| 109 | + // blobData |
| 110 | + if(opcode == 2) |
111 | 111 | { |
112 | | - // format : address_data, (address and data split with "_") |
113 | | - // the data format is hex string |
114 | | - var msg = address + "_"; |
115 | | - var array = new Uint8Array(reader.result); |
116 | | - for(var i = 0; i < array.length; i++) |
| 112 | + var reader = new FileReader(); |
| 113 | + reader.addEventListener("loadend", function() |
117 | 114 | { |
118 | | - var b = array[i]; |
119 | | - if(b < 16) |
120 | | - msg += "0" + b.toString(16); |
121 | | - else |
122 | | - msg += b.toString(16); |
123 | | - } |
124 | | - SendMessage(RECEIVER_NAME, RECEIVE_METHOD_NAME, msg); |
125 | | - }); |
126 | | - reader.readAsArrayBuffer(blobData); |
| 115 | + // format : address_data, (address and data split with "_") |
| 116 | + // the data format is hex string |
| 117 | + var array = new Uint8Array(reader.result); |
| 118 | + for(var i = 0; i < array.length; i++) |
| 119 | + { |
| 120 | + var b = array[i]; |
| 121 | + if(b < 16) |
| 122 | + addr_opcode_data += "0" + b.toString(16); |
| 123 | + else |
| 124 | + addr_opcode_data += b.toString(16); |
| 125 | + } |
| 126 | + SendMessage(RECEIVER_NAME, MESSAGE_METHOD_NAME, addr_opcode_data); |
| 127 | + }); |
| 128 | + reader.readAsArrayBuffer(data); |
| 129 | + } |
| 130 | + else |
| 131 | + { |
| 132 | + addr_opcode_data += data; |
| 133 | + SendMessage(RECEIVER_NAME, MESSAGE_METHOD_NAME, addr_opcode_data); |
| 134 | + } |
127 | 135 | }, |
128 | 136 |
|
129 | 137 | $OnOpen: function(address) |
|
135 | 143 | { |
136 | 144 | if(webSocketMap.get(address)) |
137 | 145 | webSocketMap.delete(address); |
138 | | - SendMessage(RECEIVER_NAME, CLOSE_METHOD_NAME, address, code, reason, wasClean); |
| 146 | + SendMessage(RECEIVER_NAME, CLOSE_METHOD_NAME, address+"_"+code+"_"+reason+"_"+wasClean); |
139 | 147 | }, |
140 | 148 |
|
141 | 149 | $OnError: function(address, errorMsg) |
142 | 150 | { |
143 | 151 | var combinedMsg = address + "_" + errorMsg; |
144 | | - SendMessage(RECEIVER_NAME, ERROR_METHOD_NAME ,combinedMsg); |
| 152 | + SendMessage(RECEIVER_NAME, ERROR_METHOD_NAME, combinedMsg); |
145 | 153 | }, |
146 | | - |
147 | | - $GetCloseReason: function(code) |
148 | | - { |
149 | | - var error = ""; |
150 | | - switch (code) |
151 | | - { |
152 | | - case 1001: |
153 | | - error = "Endpoint going away."; |
154 | | - break; |
155 | | - case 1002: |
156 | | - error = "Protocol error."; |
157 | | - break; |
158 | | - case 1003: |
159 | | - error = "Unsupported message."; |
160 | | - break; |
161 | | - case 1005: |
162 | | - error = "No status."; |
163 | | - break; |
164 | | - case 1006: |
165 | | - error = "Abnormal disconnection."; |
166 | | - break; |
167 | | - case 1009: |
168 | | - error = "Data frame too large."; |
169 | | - break; |
170 | | - default: |
171 | | - error = "Error Code " + code; |
172 | | - break; |
173 | | - } |
174 | | - return error; |
175 | | - }, |
176 | | - |
177 | 154 | }; |
178 | 155 |
|
179 | 156 | // Auto add to depends |
180 | 157 | autoAddDeps(WebSocketJS, '$RECEIVER_NAME'); |
181 | 158 | autoAddDeps(WebSocketJS, '$OPEN_METHOD_NAME'); |
182 | 159 | autoAddDeps(WebSocketJS, '$CLOSE_METHOD_NAME'); |
183 | | -autoAddDeps(WebSocketJS, '$RECEIVE_STRING_METHOD_NAME'); |
184 | | -autoAddDeps(WebSocketJS, '$RECEIVE_METHOD_NAME'); |
| 160 | +autoAddDeps(WebSocketJS, '$MESSAGE_METHOD_NAME'); |
| 161 | +autoAddDeps(WebSocketJS, '$ERROR_METHOD_NAME'); |
185 | 162 | autoAddDeps(WebSocketJS, '$webSocketMap'); |
186 | 163 | autoAddDeps(WebSocketJS, '$Initialize'); |
187 | 164 | autoAddDeps(WebSocketJS, '$OnMessage'); |
188 | | -autoAddDeps(WebSocketJS, '$OnMessageString'); |
189 | 165 | autoAddDeps(WebSocketJS, '$OnOpen'); |
190 | 166 | autoAddDeps(WebSocketJS, '$OnClose'); |
191 | 167 | autoAddDeps(WebSocketJS, '$OnError'); |
192 | | -autoAddDeps(WebSocketJS, '$GetCloseReason'); |
193 | 168 | mergeInto(LibraryManager.library, WebSocketJS); |
0 commit comments