public EventEngine(IReader reader, IWriter writer, IEventHolder eventHolder, IEventLogger eventLogger)
 {
     this.reader = reader;
     this.writer = writer;
     this.eventHolder = eventHolder;
     this.eventLogger = eventLogger;
 }
 public MessageComposer(IContainer container)
 {
     serializer  = container.Resolve <ISerializer>();
     compression = container.Resolve <ICompression>();
     encryption  = container.Resolve <IEncryption>();
     eventHolder = container.Resolve <IEventHolder>();
 }
Esempio n. 3
0
 protected virtual void InitializeEventHolder()
 {
     if (m_EventHolder != null)
     {
         return;
     }
     m_EventHolder = EventHolder.Instance;
 }
 public Notifyer()
 {
     m_view        = View.Instance;
     m_eventHolder = EventHolder.Instance;
 }
        /// <summary>
        /// </summary>
        /// <param name="message">
        /// </param>
        /// <param name="client">
        /// </param>
        /// <exception cref="NullReferenceException">
        /// </exception>
        protected override void Read(GenericCmdMessage message, IZoneClient client)
        {
            switch (message.Action)
            {
            case GenericCmdAction.Get:
                break;

            case GenericCmdAction.Drop:
                break;

            case GenericCmdAction.Use:
                if (message.Target[0].Type == IdentityType.Inventory)
                {
                    client.Controller.UseItem(message.Target[0]);

                    // Acknowledge action
                    this.Acknowledge(client.Controller.Character, message);
                }
                else
                {
                    if (Pool.Instance.Contains(message.Target[0]))
                    {
                        // TODO: Call OnUse of the targets controller
                        // Static dynels first
                        IEventHolder temp = null;
                        try
                        {
                            temp =
                                Pool.Instance.GetObject <IEventHolder>(
                                    client.Controller.Character.Playfield.Identity,
                                    message.Target[0]);
                        }
                        catch (Exception)
                        {
                        }
                        if (temp != null)
                        {
                            var entity = temp as IEntity;
                            if (entity != null)
                            {
                                Event ev = temp.Events.FirstOrDefault(x => x.EventType == EventType.OnUse);
                                if (ev != null)
                                {
                                    ev.Perform(client.Controller.Character, entity);
                                    this.Acknowledge(client.Controller.Character, message);
                                }
                                else
                                {
                                    ev = temp.Events.FirstOrDefault(x => x.EventType == EventType.OnTrade);
                                    if (ev != null)
                                    {
                                        ev.Perform(client.Controller.Character, entity);

                                        TemporaryBag tempBag = new TemporaryBag(
                                            client.Controller.Character.Identity,
                                            new Identity()
                                        {
                                            Type     = IdentityType.TempBag,
                                            Instance =
                                                Pool.Instance.GetFreeInstance <TemporaryBag>(
                                                    0,
                                                    IdentityType.TempBag)
                                        },
                                            client.Controller.Character.Identity,
                                            message.Target[0]);
                                        client.Controller.Character.ShoppingBag = tempBag;
                                        TradeMessageHandler.Default.Send(client.Controller.Character, tempBag);
                                        this.Acknowledge(client.Controller.Character, message);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        // Use statel (doors, grid terminals etc)
#if DEBUG
                        string s = string.Format(
                            "Generic Command received:\r\nAction: {0} ({1}){2}Target: {3} {4}",
                            message.Action,
                            (int)message.Action,
                            Environment.NewLine,
                            message.Target[0].Type,
                            message.Target[0].ToString(true));
                        ChatTextMessageHandler.Default.Send(client.Controller.Character, s);
#endif
                        client.Controller.UseStatel(message.Target[0]);
                    }
                }

                break;

            case GenericCmdAction.UseItemOnItem:
                IItem item =
                    Pool.Instance.GetObject <IInventoryPage>(
                        new Identity()
                {
                    Type     = (IdentityType)client.Controller.Character.Identity.Instance,
                    Instance = (int)message.Target[0].Type
                })[message.Target[0].Instance];
                client.Controller.Character.Stats[StatIds.secondaryitemtemplate].Value = item.LowID;
                //client.Controller.Character.Stats[StatIds.secondaryitemtype]
                if (Pool.Instance.Contains(message.Target[1]))
                {
                    StaticDynel temp =
                        Pool.Instance.GetObject <StaticDynel>(
                            client.Controller.Character.Playfield.Identity,
                            message.Target[1]);
                    if (temp != null)
                    {
                        Event ev = temp.Events.FirstOrDefault(x => x.EventType == EventType.OnUseItemOn);
                        if (ev != null)
                        {
                            ev.Perform(client.Controller.Character, temp);
                        }
                    }
                }
                else
                {
                    client.Controller.UseStatel(message.Target[1], EventType.OnUseItemOn);
                }
                break;
            }
        }
 public Event1Subscriber(IEventHolder eventHolder)
 {
     _EventHolder = eventHolder;
 }