Example #1
0
        private void ProcessCommandMessage(CliClient client, string domain, ConcurrentDictionary <ulong, MessageEntry> messages, ObjectCommandEnvelope commandEnvelope)
        {
            BaseCommand responseCommand = null;

            switch ((CommandType)commandEnvelope.Command.Type)
            {
            case CommandType.ObjectCreate:
                responseCommand = new ObjectCreateCommand(commandEnvelope.Command);
                break;

            case CommandType.ObjectUpdatePosition:
                responseCommand = new ObjectUpdatePositionCommand(commandEnvelope.Command);
                break;

            case CommandType.ObjectDestroy:
                responseCommand = new ObjectDestroyCommand(commandEnvelope.Command);
                break;
            }
            if (!messages.ContainsKey(commandEnvelope.ToObjectId))
            {
                Log.WriteLine($"[{client.ClientId} ERROR: {domain} mMessage {commandEnvelope.ToObjectId} is missing");
                return;
            }
            messages[commandEnvelope.ToObjectId].ResponseTimeStamp = DateTime.Now;
            messages[commandEnvelope.ToObjectId].ResponseCount++;
            byte[] responseData = commandEnvelope.Serialize();
            byte[] requestData  = messages[commandEnvelope.ToObjectId].CommandEnvelope.Serialize();
            if (!ComparyBinary(responseData, requestData))
            {
                Log.WriteLine($"{client.ClientId} ERROR: {domain} message {commandEnvelope.ToObjectId} invalid response");
            }
        }
Example #2
0
        public void ActorMustNotifyAreaRegionOnCreationAndDestruction()
        {
            //setup
            var areRegionProbe           = CreateTestProbe();
            var localShardRegionResolver = new Mock <IShardRegionResolver>();

            localShardRegionResolver.Setup(m => m.GetShardRegion(ShardRegions.AREAREGION)).Returns(areRegionProbe);
            var testeeRef = Sys.ActorOf(Props.Create(() => new ObjectActor(localShardRegionResolver.Object)), DEFAULTOBJECTID.ToString(CultureInfo.InvariantCulture));

            Watch(testeeRef);

            var cmdCreate = new ObjectCreateCommand(
                frameTick: 0,
                objectId: DEFAULTOBJECTID,
                parentObjectId: 0,
                ownerId: 0,
                typeId: 0,
                targetPosition: new AVector3 {
                X = 10.0f,
                Y = 20.0f,
                Z = 30.0f,
            },
                targetOrientation: new AQuaternion {
                X = 40.0f,
                Y = 50.0f,
                Z = 60.0f,
                W = 70.0f,
            });
            var cmdEnvCreate = new ObjectCommandEnvelope(0, cmdCreate, DEFAULTOBJECTID);

            var cmdDestroy = new ObjectDestroyCommand(
                frameTick: 0,
                objectId: DEFAULTOBJECTID,
                targetPosition: new AVector3
            {
                X = 10.0f,
                Y = 20.0f,
                Z = 30.0f
            });
            var cmdEnvDestroy = new ObjectCommandEnvelope(0, cmdDestroy, DEFAULTOBJECTID);

            //execute
            testeeRef.Tell(cmdEnvCreate);

            //verify - object enters area
            areRegionProbe.ExpectMsg <ObjectEnterAreaCommand>(m => {
                Assert.Equal(DEFAULTOBJECTID, m.ObjectId);
                Assert.Equal(Locator.GetAreaIdFromWorldPosition(cmdCreate.TargetPosition), m.AreaId);
            });

            //create reaches area subscribers
            areRegionProbe.ExpectMsg <AreaCommandEnvelope>(m =>
            {
                Assert.Equal(Locator.GetAreaIdFromWorldPosition(cmdCreate.TargetPosition), m.ToAreaId);
                Assert.Equal(CommandType.ObjectCreate, m.ObjectCommandEnvelope.Command.Type);
            });

            //execute
            testeeRef.Tell(cmdEnvDestroy);

            //verify - object leaves area
            areRegionProbe.ExpectMsg <ObjectLeaveAreaCommand>(m => {
                Assert.Equal(DEFAULTOBJECTID, m.ObjectId);
                Assert.Equal(Locator.GetAreaIdFromWorldPosition(cmdDestroy.TargetPosition), m.AreaId);
            });

            //verify - destroy reaches area subscribers
            areRegionProbe.ExpectMsg <AreaCommandEnvelope>(m =>
            {
                Assert.Equal(Locator.GetAreaIdFromWorldPosition(cmdCreate.TargetPosition), m.ToAreaId);
                Assert.Equal(CommandType.ObjectDestroy, m.ObjectCommandEnvelope.Command.Type);
            });
            ExpectTerminated(testeeRef);
        }