OpenMetaverse.CapsEventDictionary.BeginRaiseEvent C# (CSharp) Method

BeginRaiseEvent() private method

Fire the events registered for this event type asynchronously
private BeginRaiseEvent ( string capsEvent, StructuredData body, Simulator simulator ) : void
capsEvent string Capability name
body StructuredData Decoded event body
simulator Simulator Reference to the simulator that /// generated this event
return void
        internal void BeginRaiseEvent(string capsEvent, StructuredData.OSD body, Simulator simulator)
        {
            bool specialHandler = false;
            Caps.EventQueueCallback callback;

            // Default handler first, if one exists
            if (_EventTable.TryGetValue(String.Empty, out callback))
            {
                if (callback != null)
                {
                    CapsCallbackWrapper wrapper;
                    wrapper.Callback = callback;
                    wrapper.CapsEvent = capsEvent;
                    wrapper.Body = body;
                    wrapper.Simulator = simulator;
                    ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
                }
            }

            // Generic parser next, don't generic parse events we've manually registered for
            if (body.Type == StructuredData.OSDType.Map && !_EventTable.ContainsKey(capsEvent))
            {
                StructuredData.OSDMap map = (StructuredData.OSDMap)body;
                Packet packet = Packet.BuildPacket(capsEvent, map);
                if (packet != null)
                {
                    NetworkManager.IncomingPacket incomingPacket;
                    incomingPacket.Simulator = simulator;
                    incomingPacket.Packet = packet;

                    Logger.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler", Client);

                    Client.Network.PacketInbox.Enqueue(incomingPacket);
                    specialHandler = true;
                }
            }

            // Explicit handler next
            if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null)
            {
                CapsCallbackWrapper wrapper;
                wrapper.Callback = callback;
                wrapper.CapsEvent = capsEvent;
                wrapper.Body = body;
                wrapper.Simulator = simulator;
                ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);

                specialHandler = true;
            }

            if (!specialHandler)
                Logger.Log("Unhandled CAPS event " + capsEvent, Helpers.LogLevel.Warning, Client);
        }