testing stuff is in transpiler now
This commit is contained in:
		
							parent
							
								
									11faf235d5
								
							
						
					
					
						commit
						b04a243190
					
				|  | @ -1 +0,0 @@ | |||
| emcc -lwebsocket.js -o index.html test.c | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -1,131 +0,0 @@ | |||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <emscripten/websocket.h> | ||||
| #include <assert.h> | ||||
| 
 | ||||
| // Vector3, 3 components
 | ||||
| typedef struct Vector3 { | ||||
|     float x;                // Vector x component
 | ||||
|     float y;                // Vector y component
 | ||||
|     float z;                // Vector z component
 | ||||
| } Vector3; | ||||
| 
 | ||||
| // Camera, defines position/orientation in 3d space
 | ||||
| typedef struct Camera3D { | ||||
|     Vector3 position;       // Camera position
 | ||||
|     Vector3 target;         // Camera target it looks-at
 | ||||
|     Vector3 up;             // Camera up vector (rotation over its axis)
 | ||||
|     float fovy;             // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic
 | ||||
|     int projection;         // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
 | ||||
| } Camera3D; | ||||
| 
 | ||||
| EM_BOOL WebSocketOpen(int eventType, const EmscriptenWebSocketOpenEvent *e, void *userData) { | ||||
|   printf("open(eventType=%d, userData=%p)\n", eventType, userData); | ||||
| 
 | ||||
|   Camera3D camera = {0}; | ||||
|   camera.position = (Vector3){-9.0f, 9.0f, 4.0f}; | ||||
|   camera.target = (Vector3){9.0f, 9.0f, 0.0f}; | ||||
|   camera.up = (Vector3){0.0f, 1.0f, 0.0f}; | ||||
|   camera.fovy = 60.0f; | ||||
|   camera.projection = 0; | ||||
| 
 | ||||
|   emscripten_websocket_send_binary(e->socket, &camera, sizeof(camera)); | ||||
| 
 | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| EM_BOOL WebSocketClose(int eventType, const EmscriptenWebSocketCloseEvent *e, void *userData) { | ||||
|   printf("close(eventType=%d, wasClean=%d, code=%d, reason=%s, userData=%p)\n", eventType, e->wasClean, e->code, e->reason, userData); | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| EM_BOOL WebSocketError(int eventType, const EmscriptenWebSocketErrorEvent *e, void *userData) { | ||||
|   printf("error(eventType=%d, userData=%p)\n", eventType, userData); | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| EM_BOOL WebSocketMessage(int eventType, const EmscriptenWebSocketMessageEvent *e, void *userData) { | ||||
|   printf("message(eventType=%d, userData=%p data=%p, numBytes=%d, isText=%d)\n", eventType, userData, e->data, e->numBytes, e->isText); | ||||
|   static int text_received = 0; | ||||
|   if (e->isText) { | ||||
|     printf("text data: \"%s\"\n", e->data); | ||||
|     assert(strcmp((const char*)e->data, "hello on the other side") == 0); | ||||
|     text_received = 1; | ||||
|     return 0; | ||||
|   } | ||||
| 
 | ||||
|   Camera3D camera; | ||||
|   memcpy(&camera, e->data, sizeof camera); | ||||
| 
 | ||||
|   printf("x: %f", camera.position.x); | ||||
|   printf(" y: %f", camera.position.y); | ||||
|   printf(" z: %f", camera.position.z); | ||||
|   printf(" fovy: %f", camera.fovy); | ||||
|   printf("\n"); | ||||
| 
 | ||||
|   emscripten_websocket_close(e->socket, 0, 0); | ||||
|   emscripten_websocket_delete(e->socket); | ||||
|   emscripten_force_exit(0); | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|   assert(emscripten_websocket_is_supported()); | ||||
| 
 | ||||
|   EmscriptenWebSocketCreateAttributes attr; | ||||
|   emscripten_websocket_init_create_attributes(&attr); | ||||
| 
 | ||||
|   const char *url = "ws://localhost:8089/"; | ||||
|   attr.url = url; | ||||
|   // We don't really use a special protocol on the server backend in this test,
 | ||||
|   // but check that it can be passed.
 | ||||
|   attr.protocols = "binary,base64"; | ||||
| 
 | ||||
|   EMSCRIPTEN_WEBSOCKET_T socket = emscripten_websocket_new(&attr); | ||||
|   assert(socket >= 0); | ||||
| 
 | ||||
|   // URL:
 | ||||
|   int urlLength = 0; | ||||
|   EMSCRIPTEN_RESULT res = emscripten_websocket_get_url_length(socket, &urlLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   assert(urlLength == strlen(url)+1); | ||||
| 
 | ||||
|   char *url2 = malloc(urlLength); | ||||
|   res = emscripten_websocket_get_url(socket, url2, urlLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   printf("url: %s, verified: %s, length: %d\n", url, url2, urlLength); | ||||
|   assert(!strcmp(url, url2)); | ||||
| 
 | ||||
|   // Protocol:
 | ||||
|   int protocolLength = 0; | ||||
|   res = emscripten_websocket_get_protocol_length(socket, &protocolLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   assert(protocolLength == 1); // Null byte
 | ||||
| 
 | ||||
|   char *protocol = malloc(protocolLength); | ||||
|   res = emscripten_websocket_get_protocol(socket, protocol, protocolLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   // We don't really use a special protocol on the server backend in this test,
 | ||||
|   // but test that it comes out as an empty string at least.
 | ||||
|   assert(!strcmp(protocol, "")); | ||||
| 
 | ||||
|   // Extensions:
 | ||||
|   int extensionsLength = 0; | ||||
|   res = emscripten_websocket_get_extensions_length(socket, &extensionsLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   assert(extensionsLength == 1); // Null byte
 | ||||
| 
 | ||||
|   char *extensions = malloc(extensionsLength); | ||||
|   res = emscripten_websocket_get_extensions(socket, extensions, extensionsLength); | ||||
|   assert(res == EMSCRIPTEN_RESULT_SUCCESS); | ||||
|   // We don't really use any extensions on the server backend in this test, but
 | ||||
|   // test that it comes out as an empty string at least.
 | ||||
|   assert(!strcmp(extensions, "")); | ||||
| 
 | ||||
|   emscripten_websocket_set_onopen_callback(socket, (void*)0x42, WebSocketOpen); | ||||
|   emscripten_websocket_set_onclose_callback(socket, (void*)0x43, WebSocketClose); | ||||
|   emscripten_websocket_set_onerror_callback(socket, (void*)0x44, WebSocketError); | ||||
|   emscripten_websocket_set_onmessage_callback(socket, (void*)0x45, WebSocketMessage); | ||||
|   emscripten_exit_with_live_runtime(); | ||||
|   return 0; | ||||
| } | ||||
|  | @ -1,101 +0,0 @@ | |||
| class Vector3 { | ||||
|   constructor(init = {}, ptr = undefined) { | ||||
|     this._size = 12; | ||||
|     this._ptr = ptr.buffer || new ArrayBuffer(this._size); | ||||
|     this._data = new DataView(this._ptr); | ||||
|     for (const key of Object.keys(init)) { | ||||
|       this[key] = init[key]; | ||||
|     } | ||||
|   } | ||||
|   get x() { | ||||
|     return this._data.getFloat32(0, true); | ||||
|   } | ||||
|   get y() { | ||||
|     return this._data.getFloat32(4, true); | ||||
|   } | ||||
|   get z() { | ||||
|     return this._data.getFloat32(8, true); | ||||
|   } | ||||
|   set x(v) { | ||||
|     this._data.setFloat32(0, v, true); | ||||
|   } | ||||
|   set y(v) { | ||||
|     this._data.setFloat32(4, v, true); | ||||
|   } | ||||
|   set z(v) { | ||||
|     this._data.setFloat32(8, v, true); | ||||
|   } | ||||
|   get bytes() { | ||||
|     return new Uint8Array(this._ptr); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class Camera3D { | ||||
|   constructor(init = {}, ptr = undefined) { | ||||
|     this._size = 44; | ||||
|     this._ptr = ptr.buffer || new ArrayBuffer(this._size); | ||||
|     this._data = new DataView(this._ptr); | ||||
|     for (const key of Object.keys(init)) { | ||||
|       this[key] = init[key]; | ||||
|     } | ||||
|   } | ||||
|   get position() { | ||||
|     return new Vector3({}, new Uint8Array(this._ptr.slice(0, 12))); | ||||
|   } | ||||
|   get target() { | ||||
|     return new Vector3({}, new Uint8Array(this._ptr.slice(12, 24))); | ||||
|   } | ||||
|   get up() { | ||||
|     return new Vector3({}, new Uint8Array(this._ptr.slice(24, 36))); | ||||
|   } | ||||
|   get fovy() { | ||||
|     return this._data.getFloat32(36, true); | ||||
|   } | ||||
|   get projection() { | ||||
|     return this._data.getInt32(40, true); | ||||
|   } | ||||
|   set position(v) { | ||||
|     this._data.set(v.bytes(), 0); | ||||
|   } | ||||
|   set target(v) { | ||||
|     this._data.set(v.bytes(), 12); | ||||
|   } | ||||
|   set up(v) { | ||||
|     this._data.set(v.bytes(), 24); | ||||
|   } | ||||
|   set fovy(v) { | ||||
|     return this._data.setFloat32(36, v, true); | ||||
|   } | ||||
|   set projection(v) { | ||||
|     return this._data.setInt32(40, v, true); | ||||
|   } | ||||
|   get bytes() { | ||||
|     return new Uint8Array(this._ptr); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| var decoder = new TextDecoder("utf-8"); | ||||
| var port = 8089; | ||||
| var ws = require("ws"); | ||||
| var wss = new ws.WebSocketServer({ port: port }); | ||||
| console.log("WebSocket server listening on ws://localhost:" + port + "/"); | ||||
| wss.on("connection", function (ws) { | ||||
|   console.log("Client connected!"); | ||||
|   ws.on("message", function (message, isBinary) { | ||||
|     if (!isBinary) { | ||||
|       var text = decoder.decode(new Uint8Array(message).buffer); | ||||
|       console.log("received TEXT: " + text.length + " characters:"); | ||||
|       console.log('  "' + text + '"'); | ||||
|     } else { | ||||
|       const camera = new Camera3D({}, new Uint8Array(message)); | ||||
|       console.log(camera.position.x, camera.position.y, camera.position.z); | ||||
|       console.log(camera.target.x, camera.target.y, camera.target.z); | ||||
|       console.log(camera.up.x, camera.up.y, camera.up.z); | ||||
|       console.log(camera.fovy); | ||||
|       console.log(camera.projection); | ||||
|       console.log(camera.bytes); | ||||
| 
 | ||||
|       ws.send(camera.bytes, { binary: true }); // Echo back the received message
 | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue