Ha, this is awesome. I tried to carve out some free time at night to work on something similar for our game engine, and never got too far with it. I'm definitely going to try integrating this and see what it's like.
And while it was pretty powerful, I found the process of adding custom data visualizers pretty handicapped by their native interface requirements.
With the current state of your code, how hard would it be for someone to add plugin based functionality to implement custom data messages and visualizers?
I really, really want to add support for plugins/extensions to support custom data visualizers, but it still needs a bit of work on the web client side, mainly some code cleanup and some new ui functionality, and possibly a bit of work on the server side for easier message receiving. I'll definitely add the plugin functionality for the next version. You can send me a pm/email to discuss it further, so that I'll have a better idea on what kind of functionality you need for your custom visualizers.
Yes, but a Unity3D plugin has to be written to use the C++ server in Unity, or the server has to be rewritten in C#. Unfortunately I don't have the unity license which allows to use plugins, so I'm not going to write it, but perhaps somebody here would be willing to do it? I can provide help if that's necessary.
So, some friends and I wrote a very basic boilerplate version of something like this ourselves--I intended one day to extend it to use for gamedev tools. Awesome work here!
Would you consider adding a simple way of hooking new/delete and thus having a simple memory allocation tracker? Say, providing a simple way of registering new/delete and then just returning your wrapped versions?
EDIT:
I see you get somewhat close with 'public gamedevwebtools::core::memory::Allocator', but that doesn't seem to be used for what I'd expect--I'd suggest having something like Service::setMallocCallback and Service::setFreeCallback, and then letting the user just call your Service::malloc/Service::free in their own memory management code. Have added ability to pass in line, file, etc. on allocation/deallocation.
EDIT2:
I noticed you do the same once-a-frame business that we did, wherein you call and pump the service message loop.
One helpful addition we had was letting you bind pre-function and post-function callbacks and arguments; this made it easy to, for example, call appropriate mutexes and whatnot on an object prior to querying it or mutating it. You may consider adding something similar to that--right now your extensibility seems to be mainly in overriding the on*Message stuff.
I could hook new and delete, and perhaps some other core functions, but I would rather keep the server code minimal and conflict free, so it could be an option which you have to manually enable with a define.
The gamedevwebtools::core::memory::Allocator is used internally to provide dynamic memory allocation for the server. I like the idea of setMallocCallback, setFreeCallback and the Service::malloc and free functions as they can provide an easy collection of memory stats. I'll probably add them to the next version.
Your object binding system is pretty interesting. I was thinking of adding just service method callback on certain message types, with some sort of internal mapping to map the types to the service methods. But I'll see if I can use a more powerful system.