コード例 #1
0
        private void InjectOrUpdateObject(DaemonLogic.CloudObject cloudObject)
        {
            if (!IdObjectDictionary.ContainsKey(cloudObject.CloudObjectId))
            {
                IdObjectDictionary.Add(cloudObject.CloudObjectId, cloudObject);
                Objects.Add(cloudObject);
            }

            if (!InjectedObjects.Contains(cloudObject.CloudObjectId))
            {
                InjectedObjects.Add(cloudObject.CloudObjectId);
                InjectRequestMessage injectRequestMessage = new InjectRequestMessage();
                injectRequestMessage.ObjectFragment.ObjectId             = cloudObject.CloudObjectId;
                injectRequestMessage.ObjectFragment.OwnerId              = cloudObject.Participant.ParticipantId;
                injectRequestMessage.ObjectFragment.TypeId               = cloudObject.ObjectType.ObjectTypeId;
                injectRequestMessage.ObjectFragment.ObjectName           = cloudObject.Name;
                injectRequestMessage.ObjectFragment.TypeName             = cloudObject.ObjectType.Name;
                injectRequestMessage.ObjectFragment.BoundingSphereRadius = (float)cloudObject.Radius;
                injectRequestMessage.ObjectFragment.Mass          = (float)cloudObject.Mass;
                injectRequestMessage.ObjectFragment.Location.X    = (float)cloudObject.X;
                injectRequestMessage.ObjectFragment.Location.Y    = (float)cloudObject.Y;
                injectRequestMessage.ObjectFragment.Location.Z    = (float)cloudObject.Z;
                injectRequestMessage.ObjectFragment.Orientation.X = (float)cloudObject.OX;
                injectRequestMessage.ObjectFragment.Orientation.Y = (float)cloudObject.OY;
                injectRequestMessage.ObjectFragment.Orientation.Z = (float)cloudObject.OZ;
                injectRequestMessage.ObjectFragment.Orientation.W = (float)cloudObject.OW;

                OmModelPrimitiveExt modelPrimitiveExt = new OmModelPrimitiveExt();
                modelPrimitiveExt.ModelUrl = cloudObject.ModelUrl;
                modelPrimitiveExt.Scale    = (float)cloudObject.ModelScale;
                injectRequestMessage.SetExtension(modelPrimitiveExt);

                client.InjectObject(injectRequestMessage);
            }
            else
            {
                ModifyRequestMessage modifyRequestMessage = new ModifyRequestMessage();
                modifyRequestMessage.ObjectFragment.ObjectId             = cloudObject.CloudObjectId;
                modifyRequestMessage.ObjectFragment.OwnerId              = cloudObject.Participant.ParticipantId;
                modifyRequestMessage.ObjectFragment.TypeId               = cloudObject.ObjectType.ObjectTypeId;
                modifyRequestMessage.ObjectFragment.ObjectName           = cloudObject.Name;
                modifyRequestMessage.ObjectFragment.TypeName             = cloudObject.ObjectType.Name;
                modifyRequestMessage.ObjectFragment.BoundingSphereRadius = (float)cloudObject.Radius;
                modifyRequestMessage.ObjectFragment.Mass          = (float)cloudObject.Mass;
                modifyRequestMessage.ObjectFragment.Location.X    = (float)cloudObject.X;
                modifyRequestMessage.ObjectFragment.Location.Y    = (float)cloudObject.Y;
                modifyRequestMessage.ObjectFragment.Location.Z    = (float)cloudObject.Z;
                modifyRequestMessage.ObjectFragment.Orientation.X = (float)cloudObject.OX;
                modifyRequestMessage.ObjectFragment.Orientation.Y = (float)cloudObject.OY;
                modifyRequestMessage.ObjectFragment.Orientation.Z = (float)cloudObject.OZ;
                modifyRequestMessage.ObjectFragment.Orientation.W = (float)cloudObject.OW;

                OmModelPrimitiveExt modelPrimitiveExt = new OmModelPrimitiveExt();
                modelPrimitiveExt.ModelUrl = cloudObject.ModelUrl;
                modelPrimitiveExt.Scale    = (float)cloudObject.ModelScale;
                modifyRequestMessage.SetExtension(modelPrimitiveExt);

                client.ModifyObject(modifyRequestMessage);
            }
        }
コード例 #2
0
 private void EjectObject(DaemonLogic.CloudObject cloudObject)
 {
     if (Objects.Contains(cloudObject))
     {
         Objects.Remove(cloudObject);
         IdObjectDictionary.Remove(cloudObject.CloudObjectId);
         if (InjectedObjects.Contains(cloudObject.CloudObjectId))
         {
             InjectedObjects.Remove(cloudObject.CloudObjectId);
             EjectRequestMessage ejectRequestMessage = new EjectRequestMessage();
             ejectRequestMessage.ObjectId = cloudObject.CloudObjectId;
             client.EjectObject(ejectRequestMessage);
         }
     }
 }
コード例 #3
0
        public void OnInteractRequest(InteractRequestMessage interactRequest)
        {
            if (interactRequest.InteractionFragment.InteractionName == "TypeList")
            {
                InteractResponseMessage interactionResponse = (InteractResponseMessage)MessageFactory.Current.ReserveMessage(typeof(InteractResponseMessage));
                interactionResponse.RequestMessageId = interactRequest.MessageId;
                interactionResponse.FailureCode      = MxpResponseCodes.SUCCESS;

                interactionResponse.InteractionFragment.InteractionName     = "TypeList";
                interactionResponse.InteractionFragment.TargetParticipantId = interactRequest.InteractionFragment.SourceParticipantId;
                interactionResponse.InteractionFragment.SourceParticipantId = interactRequest.InteractionFragment.TargetParticipantId;

                OmTypeListResponseExt responseExt = new OmTypeListResponseExt();

                List <DaemonLogic.ObjectType> objectTypes = (from t in entityContext.ObjectType orderby t.Name select t).ToList <DaemonLogic.ObjectType>();
                foreach (DaemonLogic.ObjectType objectType in objectTypes)
                {
                    OmObjectType omObjectType = new OmObjectType();
                    omObjectType.TypeId   = objectType.ObjectTypeId.ToString();
                    omObjectType.TypeName = objectType.Name;
                    responseExt.ObjectType.Add(omObjectType);
                }

                interactionResponse.SetExtension <OmTypeListResponseExt>(responseExt);

                client.SendInteractResponse(interactionResponse);
            }

            if (interactRequest.InteractionFragment.InteractionName == "ObjectInsert")
            {
                OmInsertRequestExt requestExt = interactRequest.GetExtension <OmInsertRequestExt>();

                Guid       typeId     = new Guid(requestExt.TypeId);
                ObjectType objectType = QueryUtil.First <DaemonLogic.ObjectType>(from t in entityContext.ObjectType where t.ObjectTypeId == typeId select t);
                entityContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, objectType);
                Participant participant = QueryUtil.First <DaemonLogic.Participant>(from p in entityContext.Participant where p.ParticipantId == interactRequest.InteractionFragment.SourceParticipantId select p);

                DaemonLogic.CloudObject cloudObject = new DaemonLogic.CloudObject
                {
                    CloudObjectId = Guid.NewGuid(),
                    Participant   = participant,
                    ObjectType    = objectType,
                    Bubble        = bubble,
                    Name          = "New " + objectType.Name,
                    Radius        = objectType.Radius,
                    Mass          = objectType.Mass,
                    ModelUrl      = objectType.ModelUrl,
                    ModelScale    = objectType.ModelScale,
                    X             = requestExt.Location.X,
                    Y             = requestExt.Location.Y,
                    Z             = requestExt.Location.Z,
                    OX            = requestExt.Orientation.X,
                    OY            = requestExt.Orientation.Y,
                    OZ            = requestExt.Orientation.Z,
                    OW            = requestExt.Orientation.W,
                    Created       = DateTime.Now,
                    Modified      = DateTime.Now,
                    Enabled       = true
                };
                entityContext.AddToCloudObject(cloudObject);

                entityContext.SaveChanges();

                InjectOrUpdateObject(cloudObject);

                InteractResponseMessage interactionResponse = (InteractResponseMessage)MessageFactory.Current.ReserveMessage(typeof(InteractResponseMessage));
                interactionResponse.RequestMessageId = interactRequest.MessageId;
                interactionResponse.FailureCode      = MxpResponseCodes.SUCCESS;
                interactionResponse.InteractionFragment.InteractionName     = "ObjectInsert";
                interactionResponse.InteractionFragment.TargetParticipantId = interactRequest.InteractionFragment.SourceParticipantId;
                interactionResponse.InteractionFragment.SourceParticipantId = interactRequest.InteractionFragment.TargetParticipantId;

                OmInsertResponseExt responseExt = new OmInsertResponseExt();
                responseExt.ObjectId = cloudObject.CloudObjectId.ToString();

                interactionResponse.SetExtension <OmInsertResponseExt>(responseExt);

                client.SendInteractResponse(interactionResponse);
            }

            if (interactRequest.InteractionFragment.InteractionName == "ObjectUpdate")
            {
                OmUpdateRequestExt requestExt = interactRequest.GetExtension <OmUpdateRequestExt>();

                Guid objectId = new Guid(requestExt.ObjectId);

                byte failureCode = MxpResponseCodes.SUCCESS;
                if (IdObjectDictionary.ContainsKey(objectId))
                {
                    DaemonLogic.CloudObject cloudObject = IdObjectDictionary[objectId];

                    if (cloudObject.Participant.ParticipantId != interactRequest.InteractionFragment.SourceParticipantId &&
                        bubble.Participant.ParticipantId != interactRequest.InteractionFragment.SourceParticipantId)
                    {
                        failureCode = MxpResponseCodes.UNAUTHORIZED_OPERATION;
                    }
                    else
                    {
                        cloudObject.Name     = requestExt.Name;
                        cloudObject.Radius   = requestExt.Scale;
                        cloudObject.X        = requestExt.Location.X;
                        cloudObject.Y        = requestExt.Location.Y;
                        cloudObject.Z        = requestExt.Location.Z;
                        cloudObject.OX       = requestExt.Orientation.X;
                        cloudObject.OY       = requestExt.Orientation.Y;
                        cloudObject.OZ       = requestExt.Orientation.Z;
                        cloudObject.OW       = requestExt.Orientation.W;
                        cloudObject.Modified = DateTime.Now;

                        entityContext.SaveChanges();
                        InjectOrUpdateObject(cloudObject);
                    }
                }
                else
                {
                    failureCode = MxpResponseCodes.UNKNOWN_ID;
                }

                InteractResponseMessage interactionResponse = (InteractResponseMessage)MessageFactory.Current.ReserveMessage(typeof(InteractResponseMessage));
                interactionResponse.RequestMessageId = interactRequest.MessageId;

                interactionResponse.FailureCode = failureCode;
                interactionResponse.InteractionFragment.InteractionName     = "ObjectUpdate";
                interactionResponse.InteractionFragment.TargetParticipantId = interactRequest.InteractionFragment.SourceParticipantId;
                interactionResponse.InteractionFragment.SourceParticipantId = interactRequest.InteractionFragment.TargetParticipantId;

                client.SendInteractResponse(interactionResponse);
            }

            if (interactRequest.InteractionFragment.InteractionName == "ObjectDelete")
            {
                OmDeleteRequestExt requestExt = interactRequest.GetExtension <OmDeleteRequestExt>();
                Guid objectId = new Guid(requestExt.ObjectId);

                byte failureCode = MxpResponseCodes.SUCCESS;

                if (this.IdObjectDictionary.ContainsKey(objectId))
                {
                    DaemonLogic.CloudObject cloudObject = IdObjectDictionary[objectId];
                    if (cloudObject.Participant.ParticipantId != interactRequest.InteractionFragment.SourceParticipantId &&
                        bubble.Participant.ParticipantId != interactRequest.InteractionFragment.SourceParticipantId)
                    {
                        failureCode = MxpResponseCodes.UNAUTHORIZED_OPERATION;
                    }
                    else
                    {
                        entityContext.DeleteObject(cloudObject);
                        entityContext.SaveChanges();
                        EjectObject(cloudObject);
                    }
                }
                else
                {
                    failureCode = MxpResponseCodes.UNKNOWN_ID;
                }

                InteractResponseMessage interactionResponse = (InteractResponseMessage)MessageFactory.Current.ReserveMessage(typeof(InteractResponseMessage));
                interactionResponse.RequestMessageId = interactRequest.MessageId;

                interactionResponse.FailureCode = failureCode;
                interactionResponse.InteractionFragment.InteractionName     = "ObjectDelete";
                interactionResponse.InteractionFragment.TargetParticipantId = interactRequest.InteractionFragment.SourceParticipantId;
                interactionResponse.InteractionFragment.SourceParticipantId = interactRequest.InteractionFragment.TargetParticipantId;

                client.SendInteractResponse(interactionResponse);
            }
        }