public void ActionEvent() { CloudService serviceAlpha = new CloudService(serviceAlphaAssetCacheUrl, serviceAlphaAddress, serviceAlphaHubPort, serviceAlphaServerPort, serviceAlphaProgram, serviceAlphaProgramMajorVersion, serviceAlphaProgramMinorVersion); CloudBubble bubbleOne = new CloudBubble(bubbleOneId, bubbleOneName, bubbleOneRange, bubbleOnePerceptionRange); serviceAlpha.AddBubble(bubbleOne); bubbleOne.AddAllowedRemoteHubAddress(serviceBetaAddress); serviceAlpha.AddBubbleLink(bubbleOneId, bubbleTwoId, serviceBetaAddress, serviceBetaHubPort, bubbleOneTwoDeltaX, bubbleOneTwoDeltaY, bubbleOneTwoDeltaZ, true, true); CloudService serviceBeta = new CloudService(serviceBetaAssetCacheUrl, serviceBetaAddress, serviceBetaHubPort, serviceBetaServerPort, serviceBetaProgram, serviceBetaProgramMajorVersion, serviceBetaProgramMinorVersion); CloudBubble bubbleTwo = new CloudBubble(bubbleTwoId, bubbleTwoName, bubbleTwoRange, bubbleTwoPerceptionRange); bubbleTwo.AddAllowedRemoteHubAddress(serviceAlphaAddress); serviceBeta.AddBubble(bubbleTwo); CloudBubble bubbleThree = new CloudBubble(bubbleThreeId, bubbleThreeName, bubbleThreeRange, bubbleThreePerceptionRange); bubbleThree.AddAllowedRemoteHubAddress(serviceAlphaAddress); bubbleThree.AddAllowedRemoteHubAddress(serviceBetaAddress); serviceBeta.AddBubble(bubbleThree); serviceBeta.AddBubbleLink(bubbleTwoId, bubbleThreeId, serviceBetaAddress, serviceBetaHubPort, bubbleTwoThreeDeltaX, bubbleTwoThreeDeltaY, bubbleTwoThreeDeltaZ, true, true); serviceAlpha.Startup(false); serviceBeta.Startup(false); CloudView viewOne = new CloudView(1000, clientProgramName, clientProgramMajorVersion, clientProgramMinorVersion); viewOne.Connect(serviceAlphaAddress, serviceAlphaServerPort, bubbleOneId, "", "", participantIdentityProviderUrl, participantNameOne, participantPassphraseOne, objectId, false); CloudView viewTwo = new CloudView(1000, clientProgramName, clientProgramMajorVersion, clientProgramMinorVersion); viewTwo.Connect(serviceBetaAddress, serviceBetaServerPort, bubbleThreeId, "", "", participantIdentityProviderUrl, participantNameTwo, participantPassphraseTwo, objectId, false); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Assert.IsTrue(viewOne.IsConnected); Assert.IsTrue(viewTwo.IsConnected); InjectRequestMessage injectRequestMessage = new InjectRequestMessage(); injectRequestMessage.ObjectFragment.ObjectId = objectId; injectRequestMessage.ObjectFragment.ObjectIndex = objectIndex; injectRequestMessage.ObjectFragment.ObjectName = objectName; injectRequestMessage.ObjectFragment.TypeId = objectTypeId; injectRequestMessage.ObjectFragment.TypeName = objectTypeName; injectRequestMessage.ObjectFragment.OwnerId = viewOne.ParticipantId; injectRequestMessage.ObjectFragment.ParentObjectId = objectParentObjectId; injectRequestMessage.ObjectFragment.Mass = objectMass; injectRequestMessage.ObjectFragment.BoundingSphereRadius = objectBoundingSphereRadius; injectRequestMessage.ObjectFragment.Location.X = objectLocationX; injectRequestMessage.ObjectFragment.Location.Y = objectLocationY; injectRequestMessage.ObjectFragment.Location.Z = objectLocationZ; injectRequestMessage.ObjectFragment.Velocity.X = objectVelocityX; injectRequestMessage.ObjectFragment.Velocity.Y = objectVelocityY; injectRequestMessage.ObjectFragment.Velocity.Z = objectVelocityZ; injectRequestMessage.ObjectFragment.Acceleration.X = objectAccelerationX; injectRequestMessage.ObjectFragment.Acceleration.Y = objectAccelerationY; injectRequestMessage.ObjectFragment.Acceleration.Z = objectAccelerationZ; injectRequestMessage.ObjectFragment.Orientation.X = objectOrientationX; injectRequestMessage.ObjectFragment.Orientation.Y = objectOrientationY; injectRequestMessage.ObjectFragment.Orientation.Z = objectOrientationZ; injectRequestMessage.ObjectFragment.Orientation.W = objectOrientationW; injectRequestMessage.ObjectFragment.AngularVelocity.X = objectAngularVelocityX; injectRequestMessage.ObjectFragment.AngularVelocity.Y = objectAngularVelocityY; injectRequestMessage.ObjectFragment.AngularVelocity.Z = objectAngularVelocityZ; injectRequestMessage.ObjectFragment.AngularVelocity.W = objectAngularVelocityW; injectRequestMessage.ObjectFragment.AngularAcceleration.X = objectAngularAccelerationX; injectRequestMessage.ObjectFragment.AngularAcceleration.Y = objectAngularAccelerationY; injectRequestMessage.ObjectFragment.AngularAcceleration.Z = objectAngularAccelerationZ; injectRequestMessage.ObjectFragment.AngularAcceleration.W = objectAngularAccelerationW; injectRequestMessage.ObjectFragment.ExtensionDialect = objectExtensionDialect; injectRequestMessage.ObjectFragment.ExtensionDialectMajorVersion = objectExtensionDialectMajorVersion; injectRequestMessage.ObjectFragment.ExtensionDialectMinorVersion = objectExtensionDialectMinorVersion; injectRequestMessage.ObjectFragment.SetExtensionData(objectExtensionData); viewOne.InjectObject(injectRequestMessage); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); CloudObject bubbleOneCloudObject = bubbleOne.CloudCache.GetObject(objectId); Assert.IsNotNull(bubbleOneCloudObject); CloudObject bubbleTwoCloudObject = bubbleTwo.CloudCache.GetObject(objectId); Assert.IsNotNull(bubbleTwoCloudObject); CloudObject bubbleThreeCloudObject = bubbleThree.CloudCache.GetObject(objectId); Assert.IsNotNull(bubbleThreeCloudObject); CloudObject viewOneCloudObject = viewOne.CloudCache.GetObject(objectId); Assert.IsNotNull(viewOneCloudObject); CloudObject viewTwoCloudObject = viewTwo.CloudCache.GetObject(objectId); Assert.IsNotNull(viewTwoCloudObject); ActionEventMessage originalAction = new ActionEventMessage(); originalAction.ActionFragment.ActionName = actionName; originalAction.ActionFragment.ObservationRadius = actionObservationRadius; originalAction.ActionFragment.SourceObjectId = objectId; originalAction.ActionFragment.ExtensionDialect = actionExtensionDialect; originalAction.ActionFragment.ExtensionDialectMajorVersion = actionExtensionDialectMajorVersion; originalAction.ActionFragment.ExtensionDialectMinorVersion = actionExtensionDialectMinorVersion; originalAction.ActionFragment.SetExtensionData(actionExtensionData); viewOne.ExecuteAction(originalAction); ActionEventMessage receivedAction = null; viewTwo.ServerAction += delegate(ActionEventMessage actionEvent) { receivedAction = actionEvent; Assert.AreEqual(actionName, receivedAction.ActionFragment.ActionName); Assert.AreEqual(objectId, receivedAction.ActionFragment.SourceObjectId); Assert.AreEqual(actionObservationRadius, receivedAction.ActionFragment.ObservationRadius); Assert.AreEqual(actionExtensionDialect, receivedAction.ActionFragment.ExtensionDialect); Assert.AreEqual(actionExtensionDialectMajorVersion, receivedAction.ActionFragment.ExtensionDialectMajorVersion); Assert.AreEqual(actionExtensionDialectMinorVersion, receivedAction.ActionFragment.ExtensionDialectMinorVersion); Assert.AreEqual(ASCIIEncoding.ASCII.GetString(actionExtensionData), ASCIIEncoding.ASCII.GetString(receivedAction.ActionFragment.GetExtensionData())); }; Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Assert.IsNotNull(receivedAction); EjectRequestMessage ejectRequestMessage = new EjectRequestMessage(); ejectRequestMessage.ObjectId = objectId; viewOne.EjectObject(ejectRequestMessage); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Assert.IsNull(bubbleOne.CloudCache.GetObject(objectId)); Assert.IsNull(bubbleTwo.CloudCache.GetObject(objectId)); Assert.IsNull(bubbleThree.CloudCache.GetObject(objectId)); Assert.IsNull(viewOne.CloudCache.GetObject(objectId)); Assert.IsNull(viewTwo.CloudCache.GetObject(objectId)); viewOne.Disconnect(); viewTwo.Disconnect(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); Thread.Sleep(10); serviceAlpha.Process(); serviceBeta.Process(); viewOne.Process(); viewTwo.Process(); serviceAlpha.Shutdown(); serviceBeta.Shutdown(); }