// Get an object update but the object is not in the repository public void ReceiveMessageForMissingObject() { ServerStateMachine serverStateMachine = new TestServerStateMachine(); ServerObjectRepository objectRepo = new ServerObjectRepository(serverStateMachine); DistributedObjectId doId = new DistributedObjectId(100); Message updateMessage = new Message(); List <object> data = new List <object>(); data.Add("Test"); updateMessage.UpdateObjectMessage(true, false, doId, (int)MessageSubType.Chat, data); objectRepo.ReceiveRequest(updateMessage, Guid.Empty); }
public void ZoneHandling() { ServerStateMachine serverStateMachine = new TestServerStateMachine(); ServerObjectRepository objRepo = new ServerObjectRepository(serverStateMachine); // Create a distributed object to play with DistributedObjectId doId = new DistributedObjectId(100); DistributedTestObject obj = new DistributedTestObject(doId); ZoneId zoneId1 = new ZoneId(100); ZoneId zoneId2 = new ZoneId(200); objRepo.AddObject(obj); // No zone set yet Assert.IsTrue(objRepo.GetZone(obj) == null); Assert.IsTrue(objRepo.GetZone(doId) == null); Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0); // Set the first zone objRepo.SetObjectZone(obj, zoneId1); Assert.IsTrue(objRepo.GetZone(obj) == zoneId1); Assert.IsTrue(objRepo.GetZone(doId) == zoneId1); Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 1); // Now change to the second zone objRepo.SetObjectZone(obj, zoneId2); Assert.IsTrue(objRepo.GetZone(obj) == zoneId2); Assert.IsTrue(objRepo.GetZone(doId) == zoneId2); // Should no longer be in the first zone Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0); // Should be in the second zone Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 1); // Try setting the same zone again objRepo.SetObjectZone(obj, zoneId2); Assert.IsTrue(objRepo.GetZone(obj) == zoneId2); Assert.IsTrue(objRepo.GetZone(doId) == zoneId2); // Should be in the second zone, only once Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 1); // Remove obj objRepo.RemoveObject(obj); Assert.IsFalse(objRepo.ContainsObject(obj)); // Should not be in either zone Assert.IsTrue(objRepo.GetObjectsInZone(zoneId1).Count == 0); Assert.IsTrue(objRepo.GetObjectsInZone(zoneId2).Count == 0); }
public void SessionInterestOpenAndClose() { // Setup the server engine and its required dependencies ServerStateMachine serverStateMachine = new TestServerStateMachine(); SessionManager sessionManager = new SessionManager(); ServerObjectRepository objectRepo = new ServerObjectRepository(serverStateMachine); ServerEngine serverEngine = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector); Guid sessionId1 = new Guid(); ZoneId zoneId1 = new ZoneId(100); ZoneId zoneId2 = new ZoneId(200); ZoneId zoneId3 = new ZoneId(300); // Simple open and close interest // Tests interest changing in an empty zone serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1); Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId1); Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); // Now test interest in two zones at once serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1); serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId2); Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId2)); // Now close them as a list List <ZoneId> zoneIds = new List <ZoneId>(); zoneIds.Add(zoneId1); zoneIds.Add(zoneId2); serverEngine.ProcessCloseZoneInterest(sessionId1, zoneIds); Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId2)); // Open the same interest twice serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1); serverEngine.ProcessOpenZoneInterest(sessionId1, zoneId1); Assert.IsTrue(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); // Close it serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId1); Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId1)); // Close interest in a zone you didn't have interest in already serverEngine.ProcessCloseZoneInterest(sessionId1, zoneId3); Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId1, zoneId3)); }
public void ObjectZoneChangingWithNobodyListening() { // Setup the server engine and its required dependencies ServerStateMachine serverStateMachine = new TestServerStateMachine(); SessionManager sessionManager = new SessionManager(); ServerObjectRepository objectRepo = new ServerObjectRepository(serverStateMachine); ServerEngine serverEngine = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector); // Create a distributed object to play with DistributedObjectId doId = new DistributedObjectId(100); DistributedTestObject obj = new DistributedTestObject(doId); ZoneId zoneId1 = new ZoneId(100); ZoneId zoneId2 = new ZoneId(200); // Start by putting the object in the first zone serverEngine.ProcessZoneChange(obj, zoneId1); Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1); // Test changing to the zone the object is already in serverEngine.ProcessZoneChange(obj, zoneId1); Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1); // Now change to a new zone serverEngine.ProcessZoneChange(obj, zoneId2); Assert.IsTrue(objectRepo.GetZone(obj) == zoneId2); // Now remove the object from the zone Assert.IsTrue(serverEngine.RemoveObjectFromZone(obj) == zoneId2); Assert.IsTrue(objectRepo.GetZone(obj) == null); // Try a duplicate removal - should be safe to do Assert.IsTrue(serverEngine.RemoveObjectFromZone(obj) == null); Assert.IsTrue(objectRepo.GetZone(obj) == null); // Now put the object back in the first zone serverEngine.ProcessZoneChange(obj, zoneId1); Assert.IsTrue(objectRepo.GetZone(obj) == zoneId1); }
public void DisconnectSession() { // Setup the server engine and its required dependencies ServerStateMachine serverStateMachine = new TestServerStateMachine(); SessionManager sessionManager = new SessionManager(); ServerObjectRepository objectRepo = new ServerObjectRepository(serverStateMachine); ServerEngine serverEngine = new ServerEngine(sessionManager, objectRepo, MockSendMessageToReflector); // Create a distributed object to play with DistributedObjectId doId = new DistributedObjectId(100); DistributedTestObject obj = new DistributedTestObject(doId); ZoneId zoneId = new ZoneId(200); Guid sessionId = new Guid(); Assert.IsTrue(sessionManager.AddSession(sessionId, new ServerAccount(new AccountId(0), 0, "0", "0", "schmear", "mein", "schmeer", null))); objectRepo.AddObjectToSessionId(sessionId, obj); serverEngine.ProcessOpenZoneInterest(sessionId, zoneId); serverEngine.ProcessZoneChange(obj, zoneId); serverEngine.ProcessDisconnectSession(sessionId); // See if the object repo got cleaned up // Object repo should no longer have the object Assert.IsFalse(objectRepo.ContainsObject(obj)); Assert.IsTrue(objectRepo.GetObject(doId) == null); // Object should not be in the zone Assert.IsFalse(objectRepo.GetObjectsInZone(zoneId).Contains(obj)); Assert.IsTrue(objectRepo.GetDistributedObjectIdsOwnedBySessionId(sessionId).Count == 0); // See if the session manager got cleaned up // Session manager should no longer have the session Assert.IsFalse(sessionManager.ContainsSession(sessionId)); // Zone interest should be cleaned up Assert.IsFalse(sessionManager.SessionIdHasInterest(sessionId, zoneId)); Assert.IsFalse(sessionManager.GetSessionIdsInterestedInZoneId(zoneId).Contains(sessionId)); Assert.IsFalse(sessionManager.GetZoneIdsFromInterestedSessionId(sessionId).Contains(zoneId)); }
public TestRoomManager(ServerObjectRepository serverObjectRepository, ZoneIdManager zoneIdManager, DistributedObjectIdManager distributedObjectIdManager, ServerEngine serverEngine, SessionManager sessionManager, ServerAssetRepository serverAssetRepository, Hangout.Shared.Action <Message, Guid> sendMessageToClientCallback) : base(null) { }