Пример #1
0
 public IncomingEntityMessage(int uid, EntityMessage messageType, object message, NetConnection sender)
 {
     Uid = uid;
     MessageType = messageType;
     Message = message;
     LastProcessingAttempt = DateTime.Now;
     ReceivedTime = DateTime.Now;
     Expires = 30;
     Sender = sender;
 }
Пример #2
0
 protected override void OnEntityMessage(EntityMessage <TEntity> msg)
 {
     if (EnableEntityChangedSynchronization && msg.MessageType == EntityMessageType.Changed)
     {
         if (Equals(Repository.GetPrimaryKey(msg.Entity), PrimaryKey))
         {
             Reload();
         }
     }
     base.OnEntityMessage(msg);
 }
Пример #3
0

        
Пример #4
0

        
Пример #5
0
        private void OnEntityMessageReceived(ulong sender, EntityMessage entityMessage)
        {
            var wrapper = entityMessage.Wrapper;

            if (_entityMessageHandler.ContainsKey(wrapper.EntityId))
            {
                var handlers = _entityMessageHandler[wrapper.EntityId];
                foreach (var handler in handlers)
                {
                    var message = handler.Deserialize(wrapper);
                    handler.Invoke(wrapper.Sender, message);
                }
            }
        }
        private bool TryAddEntityToSeeables(IEntityHandle handle)
        {
            if (handle.IsDead() || handle.IsQueuedForDeath())
            {
                return(false);
            }

            if (!_seeableEntities.Add(handle))
            {
                return(false);
            }

            Parent.SendMessage(EntityMessage.EnteredViewRange(handle));
            return(true);
        }
Пример #7
0
        public object OnMessage(EntityMessage cmd, object param = null)
        {
//             if (m_MessageDelegate.ContainsKey(cmd))
//             {
//                 return m_MessageDelegate[cmd].Invoke(param);
//             }
            //modify by dianyu  此处key 是枚举 有待优化
            MessageDelegate md  = null;
            int             key = (int)cmd;

            if (m_MessageDelegate.TryGetValue(key, out md))
            {
                return(md.Invoke(param));
            }
            return(null);
        }
Пример #8
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            team = Team.Ally;
            end  = Factory.GetFactoryByID(message.arg3);

            turns   = message.arg4;
            endTime = Game.gameTime + turns;
        }
        else
        {
            team = Team.Enemy;
        }

        start = Factory.GetFactoryByID(message.arg2);
    }
Пример #9
0
        private byte[] Encode(ref EntityMessage message)
        {
            ushort msgtype = 2;

            if (message.id == 0)
            {
                message.id = GetNextID();
            }

            byte[] ver    = BitConverter.GetBytes(MOD_VER);
            byte[] type   = BitConverter.GetBytes(msgtype);
            byte[] modid  = BitConverter.GetBytes(m_modId);
            byte[] mid    = BitConverter.GetBytes(message.id);
            byte[] ttl    = BitConverter.GetBytes(message.ttl);
            byte[] orient = new byte[1] {
                (byte)message.t_orientation
            };
            byte[] entity  = BitConverter.GetBytes(message.entityid);
            byte[] mx      = BitConverter.GetBytes(message.max.X);
            byte[] my      = BitConverter.GetBytes(message.max.Y);
            byte[] rel     = Encode(message.rel);
            byte[] up      = Encode(message.up);
            byte[] forward = Encode(message.forward);
            byte[] scale   = BitConverter.GetBytes(message.scale);
            byte[] encode  = Encoding.UTF8.GetBytes(message.message);
            byte[] msg     = new byte[ver.Length + type.Length + modid.Length + mid.Length + ttl.Length + entity.Length + rel.Length + up.Length + forward.Length + scale.Length + encode.Length + 1 + mx.Length + my.Length];

            int lth = 0;

            Copy(ref msg, ref ver, ref lth);
            Copy(ref msg, ref type, ref lth);
            Copy(ref msg, ref modid, ref lth);
            Copy(ref msg, ref mid, ref lth);
            Copy(ref msg, ref ttl, ref lth);
            Copy(ref msg, ref entity, ref lth);
            Copy(ref msg, ref orient, ref lth);
            Copy(ref msg, ref mx, ref lth);
            Copy(ref msg, ref my, ref lth);
            Copy(ref msg, ref rel, ref lth);
            Copy(ref msg, ref up, ref lth);
            Copy(ref msg, ref forward, ref lth);
            Copy(ref msg, ref scale, ref lth);
            Copy(ref msg, ref encode, ref lth);
            return(msg);
        }
        private void OnNewFollowPlayer(EntityMessage data)
        {
            var ent = data.AsNewPlayerFollowTarget().Entity;

            if (ent.IsDead())
            {
                return;
            }

            var player = ent.Get().GetPlayer();

            if (player == null)
            {
                return;
            }

            SetInteractingEntity(new PlayerInteractingEntity(player));
        }
Пример #11
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            team = Team.Ally;
        }
        else if (message.arg1 == -1)
        {
            team = Team.Enemy;
        }
        else
        {
            team = Team.Neutral;
        }

        numRobots  = message.arg2;
        production = message.arg3;
    }
Пример #12
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            SetTeam(Team.Ally);
        }
        else
        {
            SetTeam(Team.Enemy);
        }

        start = Factory.GetFactoryByID(message.arg2);
        end   = Factory.GetFactoryByID(message.arg3);
        count = message.arg4;
        turns = message.arg5;

        end.incoming.Add(id, this);
    }
Пример #13
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            SetTeam(Team.Ally);
        }
        else if (message.arg1 == -1)
        {
            SetTeam(Team.Enemy);
        }
        else
        {
            SetTeam(Team.Neutral);
        }

        count      = message.arg2;
        production = message.arg3;
    }
Пример #14
0
        /// <summary>
        /// 建立消息
        /// </summary>
        /// <param name="messageID"></param>
        /// <returns></returns>
        public override Message Create(int messageID)
        {
            if (!Enum.IsDefined(typeof(RemotingMessageType), messageID)) return null;

            RemotingMessageType rmt = (RemotingMessageType)messageID;
            RemotingMessage message = null;
            switch (rmt)
            {
                case RemotingMessageType.Method:
                    message = new MethodMessage();
                    break;
                case RemotingMessageType.Entity:
                    message = new EntityMessage();
                    break;
                default:
                    break;
            }
            return message;
        }
Пример #15
0
    static void Main(string[] args)
    {
        string[] inputs;
        int      factoryCount = int.Parse(Console.ReadLine()); // the number of factories
        int      linkCount    = int.Parse(Console.ReadLine()); // the number of links between factories

        for (int i = 0; i < linkCount; i++)
        {
            inputs = Console.ReadLine().Split(' ');
            int factory1 = int.Parse(inputs[0]);
            int factory2 = int.Parse(inputs[1]);
            int distance = int.Parse(inputs[2]);

            Factory.AddLink(factory1, factory2, distance);
        }

        // game loop
        while (true)
        {
            int entityCount = int.Parse(Console.ReadLine()); // the number of entities (e.g. factories and troops)
            for (int i = 0; i < entityCount; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                int    entityId   = int.Parse(inputs[0]);
                string entityType = inputs[1];
                int    arg1       = int.Parse(inputs[2]);
                int    arg2       = int.Parse(inputs[3]);
                int    arg3       = int.Parse(inputs[4]);
                int    arg4       = int.Parse(inputs[5]);
                int    arg5       = int.Parse(inputs[6]);

                EntityMessage message = new EntityMessage(entityId, entityType, arg1, arg2, arg3, arg4, arg5);
                message.ProcessMessage();
            }

            // Write an action using Console.WriteLine()
            // To debug: Console.Error.WriteLine("Debug messages...");


            // Any valid action, such as "WAIT" or "MOVE source destination cyborgs"
            Console.WriteLine("WAIT");
        }
    }
Пример #16
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            isAlly  = true;
            isEnemy = false;

            team  = Team.Ally;
            start = Factory.GetFactoryByID(message.arg2);
            end   = Factory.GetFactoryByID(message.arg3);

            turns   = message.arg4;
            endTime = Game.gameTime + turns;

            end.incoming.Add(id, this);
        }
        else
        {
            isAlly  = false;
            isEnemy = true;

            turns   = 0;
            endTime = Game.gameTime;

            team = Team.Enemy;

            enemyBombs.Add(id, this);

            start = Factory.GetFactoryByID(message.arg2);

            if (Game.gameTime == 1)
            {
                end     = Factory.ally.First();
                turns   = end.links[start];
                endTime = Game.gameTime + turns;

                oldBombs.Add(this);
            }
        }

        start = Factory.GetFactoryByID(message.arg2);
    }
Пример #17
0
    static void Main(string[] args)
    {
        string[] inputs;
        int      factoryCount = int.Parse(Console.ReadLine()); // the number of factories
        int      linkCount    = int.Parse(Console.ReadLine()); // the number of links between factories

        for (int i = 0; i < linkCount; i++)
        {
            inputs = Console.ReadLine().Split(' ');
            int factory1 = int.Parse(inputs[0]);
            int factory2 = int.Parse(inputs[1]);
            int distance = int.Parse(inputs[2]);

            Factory.AddLink(factory1, factory2, distance);
        }

        // game loop
        while (true)
        {
            int entityCount = int.Parse(Console.ReadLine()); // the number of entities (e.g. factories and troops)
            for (int i = 0; i < entityCount; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                int    entityId   = int.Parse(inputs[0]);
                string entityType = inputs[1];
                int    arg1       = int.Parse(inputs[2]);
                int    arg2       = int.Parse(inputs[3]);
                int    arg3       = int.Parse(inputs[4]);
                int    arg4       = int.Parse(inputs[5]);
                int    arg5       = int.Parse(inputs[6]);

                EntityMessage message = new EntityMessage(entityId, entityType, arg1, arg2, arg3, arg4, arg5);
                message.ProcessMessage();
            }

            Game.MakeMove();

            Action.PrintActions(); //Print the move

            Game.CleanUp();
        }
    }
Пример #18
0
        public void LogIncomingComponentNetMessage(int uid, EntityMessage entityMessage, ComponentFamily componentFamily,
                                                   object[] parameters)
        {
            if (!_logging)
                return;

            for (int i = 0; i < parameters.Length; i++)
            {
                if (parameters[i] is Enum)
                    parameters[i] = (int) parameters[i];
            }
            try
            {
                _loggerServiceClient.LogClientIncomingNetMessage(uid, (int) entityMessage, (int) componentFamily,
                                                                 parameters);
            }
            catch (CommunicationException e)
            {
            }
        }
Пример #19
0
        // 消息处理
        public object SendMessage(EntityMessage cmd, object param = null)
        {
            if (cmd == EntityMessage.EntityCommand_StopMove)
            {
                // Debug.LogError("send stopmove");
            }
            Dictionary <int, IEntityCommpent> .Enumerator iter = m_Commpents.GetEnumerator();
            object ret = null;

            while (iter.MoveNext())
            {
                ret = iter.Current.Value.OnMessage(cmd, param);
                if (ret != null)
                {
                    return(ret);
                }
            }

            return(null);
        }
Пример #20
0
    public void ProcessMessage(EntityMessage message)
    {
        count      = message.arg2;
        production = message.arg3;

        if (message.arg1 == 1)
        {
            SetTeam(Team.Ally);
            Factory.allyTotalProduction += production;
        }
        else if (message.arg1 == -1)
        {
            SetTeam(Team.Enemy);
            Factory.enemyTotalProduction += production;
        }
        else
        {
            SetTeam(Team.Neutral);
        }
    }
Пример #21
0
    static void Main(string[] args)
    {
        string[] inputs;
        int      factoryCount = int.Parse(Console.ReadLine()); // the number of factories
        int      linkCount    = int.Parse(Console.ReadLine()); // the number of links between factories

        for (int i = 0; i < linkCount; i++)
        {
            inputs = Console.ReadLine().Split(' ');
            int factory1 = int.Parse(inputs[0]);
            int factory2 = int.Parse(inputs[1]);
            int distance = int.Parse(inputs[2]);

            Factory.AddLink(factory1, factory2, distance);
        }

        Game.InitializeFirstTurn();

        // game loop
        while (true)
        {
            float loopStartTime = Timer.TickCount;

            int entityCount = int.Parse(Console.ReadLine()); // the number of entities (e.g. factories and troops)
            for (int i = 0; i < entityCount; i++)
            {
                var str = Console.ReadLine();

                EntityMessage message = new EntityMessage(str);
                message.ProcessMessage();
            }

            Game.InitializeTurn();
            Game.MakeMove();
            Game.PrintActions(); //Print the move
            Game.CleanUp();

            float loopTime = Timer.TickCount - loopStartTime;
            Console.Error.WriteLine("LoopTime: " + loopTime);
        }
    }
Пример #22
0
        public override async Task <IResult <EntityMessage <int> > > Handle(Request request, CancellationToken cancellationToken = default)
        {
            var byId = new RecipesByIdWithCategoriesSpecification(request.Id);

            var maybeRecipe = await _data.Recipes.Get(byId, cancellationToken);

            if (maybeRecipe.HasValue)
            {
                return(await maybeRecipe.Value
                       .Tee(r => Transfer(request, r))
                       .TeeAsync(r => _data.Recipes.Update(r, cancellationToken))
                       .TeeAsync(r => ManageCategories(request, r, cancellationToken))
                       .MapAsync(r => Ok(EntityMessage.Create("Recipe updated.", r.Id))));
            }

            return(await new Recipe()
                   .Tee(r => Transfer(request, r))
                   .TeeAsync(r => _data.Recipes.Add(r, cancellationToken))
                   .TeeAsync(r => ManageCategories(request, r, cancellationToken))
                   .MapAsync(r => Ok(EntityMessage.Create("Recipe added.", r.Id))));
        }
Пример #23
0
    public void ProcessMessage(EntityMessage message)
    {
        if (message.arg1 == 1)
        {
            SetTeam(Team.Ally);
        }
        else
        {
            SetTeam(Team.Enemy);
        }

        start   = Factory.GetFactoryByID(message.arg2);
        end     = Factory.GetFactoryByID(message.arg3);
        count   = message.arg4;
        turns   = message.arg5;
        endTime = Game.gameTime + turns;

        end.incoming.Add(this);

        lastEndTime = Math.Max(lastEndTime, endTime); //get the last troop endTime;
    }
Пример #24
0
        private void OnMessage(EntityMessage <TEntity> message)
        {
            if (!Repository.HasPrimaryKey(message.Entity))
            {
                return;
            }
            var key = GetPrimaryKey(message.Entity);

            switch (message.MessageType)
            {
            case EntityMessageType.Added:
                OnEntityAdded(key);
                break;

            case EntityMessageType.Changed:
                OnEntityChanged(key);
                break;

            case EntityMessageType.Deleted:
                OnEntityDeleted(key);
                break;
            }
        }
Пример #25
0
        public void LogIncomingComponentNetMessage(int uid, EntityMessage entityMessage, ComponentFamily componentFamily,
                                                   object[] parameters)
        {
            if (!_logging)
            {
                return;
            }

            for (int i = 0; i < parameters.Length; i++)
            {
                if (parameters[i] is Enum)
                {
                    parameters[i] = (int)parameters[i];
                }
            }
            try
            {
                _loggerServiceClient.LogClientIncomingNetMessage(uid, (int)entityMessage, (int)componentFamily,
                                                                 parameters);
            }
            catch (CommunicationException e)
            {
            }
        }
Пример #26
0
 private void NotifyNearbyEntitiesOfDeath()
 {
     AddMarkedForDeathComponent();
     Parent.AssertGetVision().Broadcast(EntityMessage.NearbyEntityQueuedForDeath(Parent.Handle));
 }
Пример #27
0
 public void SendMessage(EntityMessage message)
 {
     SendMessage(message.Message.Value, (object)null, message.Scope);
 }
Пример #28
0
        private byte[] Encode(ref EntityMessage message)
        {
            ushort msgtype = 2;
            if (message.id == 0)
            {

                message.id = GetNextID();
            }

            byte[] ver = BitConverter.GetBytes(MOD_VER);
            byte[] type = BitConverter.GetBytes(msgtype);
            byte[] modid = BitConverter.GetBytes(m_modId);
            byte[] mid = BitConverter.GetBytes(message.id);
            byte[] ttl = BitConverter.GetBytes(message.ttl);
            byte[] orient = new byte[1] { (byte)message.t_orientation };
            byte[] entity = BitConverter.GetBytes(message.entityid);
            byte[] mx = BitConverter.GetBytes(message.max.X);
            byte[] my = BitConverter.GetBytes(message.max.Y);
            byte[] rel = Encode(message.rel);
            byte[] up = Encode(message.up);
            byte[] forward = Encode(message.forward);
            byte[] scale = BitConverter.GetBytes(message.scale);
            byte[] encode = Encoding.UTF8.GetBytes(message.message);
            byte[] msg = new byte[ver.Length + type.Length + modid.Length + mid.Length + ttl.Length + entity.Length + rel.Length + up.Length + forward.Length + scale.Length + encode.Length + 1 + mx.Length + my.Length];

            int lth = 0;
            Copy(ref msg, ref ver, ref lth);
            Copy(ref msg, ref type, ref lth);
            Copy(ref msg, ref modid, ref lth);
            Copy(ref msg, ref mid, ref lth);
            Copy(ref msg, ref ttl, ref lth);
            Copy(ref msg, ref entity, ref lth);
            Copy(ref msg, ref orient, ref lth);
            Copy(ref msg, ref mx, ref lth);
            Copy(ref msg, ref my, ref lth);
            Copy(ref msg, ref rel, ref lth);
            Copy(ref msg, ref up, ref lth);
            Copy(ref msg, ref forward, ref lth);
            Copy(ref msg, ref scale, ref lth);
            Copy(ref msg, ref encode, ref lth);
            return msg;
        }
Пример #29
0
 void ProcessEntity(EntityMessage message, Stream stream)
 {
     BinaryWriter writer = new BinaryWriter(stream);
     String str = String.Format("你要请求的实体是:[{0}]{1}", message.EntityType, message.Entity);
     writer.Write(str);
 }
 private void CatchNearbyEntityDying(EntityMessage msg)
 {
     TryDeleteEntityFromSeeables(msg.Entity);
 }
Пример #31
0
 /// <summary>
 /// Sends an Entity Attached Message to others. Entity Messages will stick to the assigned entity. 
 /// </summary>
 /// <param name="message">EntityMessage being sent or resent</param>
 /// <returns>EntityMessage with Populated ID</returns>
 public EntityMessage SendToOthers(EntityMessage message)
 {
     var msg = Encode(ref message);
     MyAPIGateway.Multiplayer.SendMessageToOthers(HUDAPI_ADVMSG, msg, true);
     return message;
 }
 /// <summary>
 /// Sends an arbitrary entity network message
 /// </summary>
 /// <param name="sendingEntity">The entity the message is going from(and to, on the other end)</param>
 /// <param name="type">Message type</param>
 /// <param name="list">List of parameter objects</param>
 public void SendEntityNetworkMessage(IEntity sendingEntity, EntityMessage type, params object[] list)
 {
 }
Пример #33
0
 public void SendMessage <TArg>(EntityMessage message, TArg argument)
 {
     SendMessage(message.Message.Value, argument, message.Scope);
 }
 /// <summary>
 /// Sends an arbitrary entity network message
 /// </summary>
 /// <param name="sendingEntity">The entity the message is going from(and to, on the other end)</param>
 /// <param name="type">Message type</param>
 /// <param name="list">List of parameter objects</param>
 public void SendEntityNetworkMessage(Entity sendingEntity, EntityMessage type, params object[] list)
 {
     NetOutgoingMessage message = CreateEntityMessage();
     message.Write((byte)type);
     message.Write(sendingEntity.Uid); //Write this entity's UID
     PackParams(message, list);
     _networkManager.SendMessage(message, NetDeliveryMethod.ReliableUnordered);
 }
 /// <summary>
 /// Sends an arbitrary entity network message
 /// </summary>
 /// <param name="sendingEntity">The entity the message is going from(and to, on the other end)</param>
 /// <param name="type">Message type</param>
 /// <param name="list">List of parameter objects</param>
 public void SendEntityNetworkMessage(Entity sendingEntity, EntityMessage type, params object[] list)
 {
 }
        private void ProductChange(EntityMessage<Product> message)
        {
            var changedProduct = message.Entity;

            if (changedProduct == null)
            {
                return;
            }

            var productList = Products.Value;

            var currentEntity = productList
                        .SingleOrDefault(product => product.Id == changedProduct.Id);

            switch (message.EntityChange)
            {
                case EntityChangeEnum.Insert:
                    productList.Add(message.Entity);

                    break;
                case EntityChangeEnum.Update:
                    if (currentEntity == null)
                    {
                        break;
                    }

                    productList[productList.IndexOf(currentEntity)] = changedProduct;

                    break;
                case EntityChangeEnum.Delete:
                    if (currentEntity == null)
                    {
                        break;
                    }
                    productList.Remove(currentEntity);

                    break;
            }
        }
Пример #37
0
 private void SelectEMsgType_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _entityMessageFilter = (EntityMessage)SelectEMsgType.SelectedItem;
     UpdateItemsView();
 }
Пример #38
0
 private void SelectEMsgType_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _entityMessageFilter = (EntityMessage)SelectEMsgType.SelectedItem;
     UpdateItemsView();
 }
Пример #39
0
        protected void RegisterMessageDelegate(EntityMessage msg, MessageDelegate msgProc)
        {
            int key = (int)msg;

            m_MessageDelegate[key] = msgProc;
        }
Пример #40
0
 private static DkimMessage ToDkimMessage(EntityMessage entityMessage)
 {
     return(new DkimMessage(entityMessage.MessageType, entityMessage.Text, entityMessage.MarkDown));
 }