Ejemplo n.º 1
0
        static internal unsafe int SendMessageEx(NativeQueue <IPCQueuedMessage> .Concurrent queue, NetworkEndPoint local,
                                                 network_iovec *iov, int iov_len, ref NetworkEndPoint address)
        {
#if ENABLE_UNITY_COLLECTIONS_CHECKS
            if (address.Family != NetworkFamily.IPC || local.Family != NetworkFamily.IPC ||
                address.nbo_port == 0 || local.nbo_port == 0)
            {
                throw new InvalidOperationException("Sending data over IPC requires both local and remote EndPoint to be valid IPC EndPoints");
            }
#endif

            var data = new IPCData();
            data.from   = local.ipc_handle;
            data.length = 0;

            for (int i = 0; i < iov_len; i++)
            {
#if ENABLE_UNITY_COLLECTIONS_CHECKS
                if (data.length + iov[i].len >= NetworkParameterConstants.MTU)
                {
                    throw new ArgumentOutOfRangeException("Cannot send more data than an MTU");
                }
#endif
                UnsafeUtility.MemCpy(data.data + data.length, iov[i].buf, iov[i].len);
                data.length += iov[i].len;
            }
            queue.Enqueue(new IPCQueuedMessage {
                dest = address.ipc_handle, data = data
            });
            return(data.length);
        }
Ejemplo n.º 2
0
        public IPCData GetLayout()
        {
            var ipcdata = new IPCData(IPCIdentifier)
            {
                { "layout", layout }
            };

            return(ipcdata);
        }
Ejemplo n.º 3
0
        public Action <T> DataReporter <T>(String name)
        {
            var ipcData = new IPCData("Menu");

            return(data =>
            {
                ipcData[name] = data;
                Manager.SendIPC(Source, ipcData);
            });
        }
Ejemplo n.º 4
0
        public IPCData GetData()
        {
            var menuData = ReadSettings();
            var ipcdata  = new IPCData(IPCIdentifier)
            {
                { "data", menuData }
            };

            return(ipcdata);
        }
Ejemplo n.º 5
0
 public void HandleIPCData(IPCData data)
 {
     if (data.ContainsKey("Message"))
     {
         Console.WriteLine($"Message received. Contents: {data.Get<string>("Message")}");
         var ipcData = new IPCData("Menu");
         ipcData["Message"] = "Message Recieved";
         _manager.SendIPC(data.SourceIdentifier, ipcData);
     }
 }
Ejemplo n.º 6
0
        public IPCData InitialMessage()
        {
            var menuData = ReadSettings();
            var ipcdata  = new IPCData(IPCIdentifier)
            {
                { "title", MenuTitle },
                { "button", MenuButton },
                { "layout", layout },
                { "data", menuData }
            };

            return(ipcdata);
        }
Ejemplo n.º 7
0
        internal unsafe void Update(NetworkInterfaceEndPoint local, NativeQueue <QueuedSendMessage> queue)
        {
            QueuedSendMessage val;

            while (queue.TryDequeue(out val))
            {
                var ipcData = new IPCData();
                UnsafeUtility.MemCpy(ipcData.data, val.Data, val.DataLength);
                ipcData.length = val.DataLength;
                ipcData.from   = *(int *)local.data;
                m_IPCQueue.Enqueue(*(int *)val.Dest.data, ipcData);
            }
        }
Ejemplo n.º 8
0
 public void HandleIPCData(IPCData data)
 {
     if (data.TryGetValue("content/header", out object header))
     {
         if ((string)header == "register/request")
         {
             Plugin.IPCPluginList.Add(data.SourceIdentifier);
             Plugin.Manager.SendIPC((string)header, new IPCData(Plugin.IPCIdentifier)
             {
                 { "content/header", "register/success" }
             });
         }
     }
 }
Ejemplo n.º 9
0
        public void SendIPC(string ipcIdentifierTo, IPCData data)
        {
            var pluginHost = PluginRegistry.GetByIPCIdentifier(ipcIdentifierTo);

            if (pluginHost != null)
            {
                if (!pluginHost.IsIPCEnabled)
                {
                    Log.Error($"Plugin with IPC ID '{data.SourceIdentifier}' tried to send IPCData to '{ipcIdentifierTo}', but the target is not IPC enabled.");
                    return;
                }

                (pluginHost.Instance as IIPCEnabled).HandleIPCData(data);
            }
        }
Ejemplo n.º 10
0
        public unsafe int SendTo(NetworkEndPoint local, void *slice, int length, NetworkEndPoint remote)
        {
            Assert.IsTrue(remote.family == NetworkFamily.IPC);
            Assert.IsTrue(local.family == NetworkFamily.IPC);
            Assert.IsTrue(remote.port != 0);
            Assert.IsTrue(local.port != 0);

            var data = new IPCData();

            data.from   = *(int *)local.address;
            data.length = length;

            UnsafeUtility.MemCpy(data.data, slice, length);

            m_IPCQueue.Enqueue(*(int *)remote.address, data);
            return(length);
        }
Ejemplo n.º 11
0
        public static void OnMessageReceived(ChatMessage m)
        {
            MessageQueue.Queue.Enqueue(m);
            if (MessageQueue.Queue.Count > 100)
            {
                MessageQueue.Queue.Dequeue();
            }
            string message = $"{m.DisplayName}: {m.Message}";

            Plugin.Log.Info(message);
            foreach (string plugin in Plugin.IPCPluginList)
            {
                IPCData data = new IPCData(Plugin.IPCIdentifier)
                {
                    { "content/header", "data/message" },
                    { "Bits", m.Bits },
                    { "BitsInDollars", m.BitsInDollars },
                    { "Badges", m.Badges },
                    { "BotUsername", m.BotUsername },
                    { "Channel", m.Channel },
                    { "CheerBadge", m.CheerBadge },
                    { "Color", m.Color },
                    { "ColorHex", m.ColorHex },
                    { "DisplayName", m.DisplayName },
                    { "EmoteReplacedMessage", m.EmoteReplacedMessage },
                    { "EmoteSet", m.EmoteSet },
                    { "Id", m.Id },
                    { "IsBroadcaster", m.IsBroadcaster },
                    { "IsMe", m.IsMe },
                    { "IsModerator", m.IsModerator },
                    { "IsSubscriber", m.IsSubscriber },
                    { "IsTurbo", m.IsTurbo },
                    { "Message", m.Message },
                    { "Noisy", m.Noisy },
                    { "RawIrcMessage", m.RawIrcMessage },
                    { "SubscribedMonthCount", m.SubscribedMonthCount },
                    { "UserId", m.UserId },
                    { "Username", m.Username },
                    { "UserType", m.UserType }
                };

                Plugin.Manager.SendIPC(plugin, data);
            }
        }