NETCInterop.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <Atomic/Script/ScriptVariantMap.h>
  2. #include <Atomic/IPC/IPC.h>
  3. #include "NETCore.h"
  4. #ifdef ATOMIC_PLATFORM_WINDOWS
  5. #define ATOMIC_EXPORT_API __declspec(dllexport)
  6. #else
  7. #define ATOMIC_EXPORT_API
  8. #endif
  9. namespace Atomic
  10. {
  11. extern "C"
  12. {
  13. ATOMIC_EXPORT_API ClassID csb_Atomic_RefCounted_GetClassID(RefCounted* refCounted)
  14. {
  15. if (!refCounted)
  16. return 0;
  17. return refCounted->GetClassID();
  18. }
  19. ATOMIC_EXPORT_API void csb_Atomic_AObject_SendEvent(Object* obj, const char* eventType, ScriptVariantMap* vmap)
  20. {
  21. obj->SendEvent(eventType, vmap ? vmap->GetVariantMap() : obj->GetEventDataMap());
  22. }
  23. ATOMIC_EXPORT_API ClassID csb_Atomic_NETCore_Initialize(NETCoreDelegates* delegates)
  24. {
  25. Context* context = new Context();
  26. NETCore* netCore = new NETCore(context, delegates);
  27. context->RegisterSubsystem(netCore);
  28. return netCore;
  29. }
  30. ATOMIC_EXPORT_API unsigned csb_Atomic_AtomicNET_StringToStringHash(const char* str)
  31. {
  32. unsigned hash = 0;
  33. if (!str)
  34. return hash;
  35. while (*str)
  36. {
  37. // Perform the actual hashing as case-insensitive
  38. char c = *str;
  39. hash = SDBMHash(hash, (unsigned char)tolower(c));
  40. ++str;
  41. }
  42. return hash;
  43. }
  44. ATOMIC_EXPORT_API void csb_Atomic_AtomicNET_ScriptVariantMapCopyVariantMap(ScriptVariantMap* svm, VariantMap* vm)
  45. {
  46. if (!svm)
  47. return;
  48. if (!vm)
  49. {
  50. svm->CopySourceVariantMap(Variant::emptyVariantMap);
  51. return;
  52. }
  53. svm->CopySourceVariantMap(*vm);
  54. }
  55. ATOMIC_EXPORT_API void* csb_Atomic_AtomicNET_ScriptVariantMap_GetVoidPtr(ScriptVariantMap* svm, const char* key)
  56. {
  57. if (!svm || !key || !strlen(key))
  58. return nullptr;
  59. return svm->GetVoidPtr(key);
  60. }
  61. // IPC
  62. ATOMIC_EXPORT_API void csb_Atomic_IPC_SendEventToBrokerWithEventData(IPC* ipc, const char* eventType, ScriptVariantMap* variantMap)
  63. {
  64. if (variantMap)
  65. ipc->SendEventToBroker(eventType, variantMap->GetVariantMap());
  66. else
  67. ipc->SendEventToBroker(eventType);
  68. }
  69. }
  70. }