Esempio n. 1
0
        static unsafe private void _interaction(_AlloClient *_client, _AlloInteraction *inter)
        {
            string type      = Marshal.PtrToStringAnsi(inter->type);
            string from      = Marshal.PtrToStringAnsi(inter->senderEntityId);
            string to        = Marshal.PtrToStringAnsi(inter->receiverEntityId);
            string cmd       = Marshal.PtrToStringAnsi(inter->body);
            string requestId = Marshal.PtrToStringAnsi(inter->requestId);

            GCHandle   backref = (GCHandle)_client->_backref;
            AlloClient self    = backref.Target as AlloClient;

            List <object> data = Deserialize <List <object> >(cmd);

            if (from == "place" && data[0].ToString() == "announce")
            {
                self.avatarId  = data[1].ToString();
                self.placeName = data[2].ToString();
                self.connected = true;
                self.onConnected?.Invoke();
            }

            AlloEntity fromEntity = null;

            if (!string.IsNullOrEmpty(from))
            {
                self.entities.TryGetValue(from, out fromEntity);
            }
            AlloEntity toEntity = null;

            if (!string.IsNullOrEmpty(to))
            {
                self.entities.TryGetValue(to, out toEntity);
            }

            ResponseCallback callback = null;

            if (type == "response" && !string.IsNullOrEmpty(requestId))
            {
                self.responseCallbacks.TryGetValue(requestId, out callback);
            }

            if (callback != null)
            {
                callback(cmd);
                self.responseCallbacks.Remove(requestId);
            }
            else
            {
                self.onInteraction?.Invoke(type, fromEntity, toEntity, data);
            }
        }
Esempio n. 2
0
 void _Interact(string interactionType, string senderEntityId, string receiverEntityId, string requestId, string body)
 {
     unsafe
     {
         IntPtr            interactionTypePtr  = Marshal.StringToHGlobalAnsi(interactionType);
         IntPtr            senderEntityIdPtr   = Marshal.StringToHGlobalAnsi(senderEntityId);
         IntPtr            receiverEntityIdPtr = Marshal.StringToHGlobalAnsi(receiverEntityId);
         IntPtr            requestIdPtr        = Marshal.StringToHGlobalAnsi(requestId);
         IntPtr            bodyPtr             = Marshal.StringToHGlobalAnsi(body);
         _AlloInteraction *interaction         = _AlloClient.allo_interaction_create(interactionTypePtr, senderEntityIdPtr, receiverEntityIdPtr, requestIdPtr, bodyPtr);
         _AlloClient.alloclient_send_interaction(client, interaction);
         _AlloClient.allo_interaction_free(interaction);
         Marshal.FreeHGlobal(interactionTypePtr);
         Marshal.FreeHGlobal(senderEntityIdPtr);
         Marshal.FreeHGlobal(receiverEntityIdPtr);
         Marshal.FreeHGlobal(requestIdPtr);
         Marshal.FreeHGlobal(bodyPtr);
     }
 }
Esempio n. 3
0
 public unsafe static extern void allo_interaction_free(_AlloInteraction *interaction);
Esempio n. 4
0
 public unsafe static extern void alloclient_send_interaction(_AlloClient *client, _AlloInteraction *interaction);