Ejemplo n.º 1
0
    public bool ScheduleChange(MeshNetworkIdentity id, StateChange change, ref IDContainer idReference)
    {
        //Debug.Log("Schedule change: my identity has objectID = " + GetIdentity().GetObjectID());
        if (GetIdentity().meshnetReference.database == null)
        {
            Debug.LogError("Can't schedule a state change without an active database");
            return(false);
        }

        ushort transactionID = GetNextTransactionID();

        callbackRegistry.Add(transactionID, idReference);
        callbackTimers.Add(transactionID, Time.time);
        StateChangeTransaction transaction = new StateChangeTransaction(transactionID, change, id);
        MeshPacket             p           = new MeshPacket();

        p.SetContents(transaction.GetSerializedBytes());
        p.SetPacketType(PacketType.DatabaseChangeRequest);
        //Debug.Log("Setting packet with source object ID = " + GetIdentity().GetObjectID());
        p.SetSourceObjectId(GetIdentity().GetObjectID());
        p.SetSourcePlayerId(GetIdentity().meshnetReference.GetLocalPlayerID());
        p.SetTargetObjectId((ushort)ReservedObjectIDs.DatabaseObject);
        p.SetTargetPlayerId(netDB.GetIdentity().GetOwnerID());
        GetIdentity().RoutePacket(p);
        return(true);
    }
Ejemplo n.º 2
0
        public void TestContainerRooting()
        {
            var rootContainer = new IDContainer("RootContainer", true);
            var subContainer  = new IDContainer("SubContainer");
            var idItem        = new IDItem("Item1");

            subContainer.Add(idItem);

            Assert.AreEqual(false, idItem.IsRooted);

            rootContainer.Add(subContainer);
            Assert.AreEqual(true, idItem.IsRooted);
        }
		private static string FindGlobalIDFromCollection (IDContainer[] _collection, string _platformID)
		{
			if (_platformID == null)
				return null;
			
			// Iterate and find the matching identifier
			foreach (IDContainer _curEntry in _collection)
			{
				if (_curEntry.CompareCurrentPlatformID(_platformID))
					return _curEntry.GetGlobalID();
			}
			
			// Couldn't find a matching identifier
			Console.LogError(Constants.kDebugTag, string.Format("[GameServices] Couldn't find global identifier info for ID= {0}.", _platformID));
			return _platformID;
		}
Ejemplo n.º 4
0
        public void TestCollectionRooting()
        {
            var rootContainer = new IDContainer("RootContainer", true);
            var subContainer1 = new EditableIDList <IIDItem>("SubContainer1");
            var subContainer2 = new EditableIDList <IIDItem>("SubContainer2");
            var idItem        = new IDItem("Item1");

            subContainer1.Add(subContainer2);
            subContainer2.Add(idItem);

            Assert.AreEqual(false, idItem.IsRooted);

            rootContainer.Add(subContainer1);
            Assert.AreEqual(true, idItem.IsRooted);

            subContainer1.Remove(subContainer2);
            Assert.AreEqual(false, idItem.IsRooted);

            // Now check that events are fired not too often
            int eventFiredCount = 0;

            idItem.RootingChanged += delegate(object sender, RootingChangedEventArgs args)
            {
                eventFiredCount++;
                switch (args.Rooting)
                {
                case RootingAction.Rooted:
                    Assert.IsNotNull(idItem.Owner);
                    break;

                case RootingAction.ToBeUnrooted:
                    Assert.IsNotNull(idItem.Owner);
                    break;
                }
            };

            subContainer1.Add(subContainer2);    // This should trigger a Rooted event
            Assert.AreEqual(1, eventFiredCount, "Rooted event didn't occur.");
            subContainer2.Remove(idItem);        // This should trigger a ToBeUnrooted event
            Assert.AreEqual(2, eventFiredCount, "ToBeUnrooted event didn't occur.");
            subContainer1.Remove(subContainer2); // This shouldn't trigger anything
            Assert.AreEqual(2, eventFiredCount, "IdItem did not unsubcribe from event.");
            subContainer2.Add(idItem);           // This should also not trigger anything
            Assert.AreEqual(2, eventFiredCount, "RootingChanged event triggered even if not in object graph.");
            subContainer1.Add(subContainer2);    // Now this should finally trigger the RootingChanged event.
            Assert.AreEqual(3, eventFiredCount);
        }
Ejemplo n.º 5
0
    IEnumerator SpawnCapsule()
    {
        float timeStart = Time.time;
        MeshNetworkIdentity requestedID      = new MeshNetworkIdentity(0, prefabID, meshnet.GetLocalPlayerID(), false);
        IDContainer         returnedObjectID = new IDContainer((ushort)ReservedObjectIDs.Unspecified);

        scheduler.ScheduleChange(requestedID, StateChange.Addition, ref returnedObjectID);

        while (returnedObjectID.id == (ushort)ReservedObjectIDs.Unspecified)
        {
            if (Time.time - timeStart > SPAWN_TIMEOUT)
            {
                Debug.LogError("Spawn timeout");
                yield break;
            }
            yield return(new WaitForEndOfFrame());
        }

        MeshNetworkIdentity newIdentity = meshnet.database.LookupObject(returnedObjectID.id);
        GameObject          g           = meshnet.game.GetObjectByIdentity(newIdentity.GetObjectID());

        if (prefabID != 4)
        {
            g.AddComponent <BasicMovementTest>();
        }
        yield break;
        yield return(new WaitForSeconds(1));

        timeStart        = Time.time;
        returnedObjectID = new IDContainer((ushort)ReservedObjectIDs.Unspecified);
        scheduler.ScheduleChange(newIdentity, StateChange.Removal, ref returnedObjectID);
        while (returnedObjectID.id == (ushort)ReservedObjectIDs.Unspecified)
        {
            if (Time.time - timeStart > SPAWN_TIMEOUT)
            {
                Debug.LogError("Spawn timeout");
                yield break;
            }
            yield return(new WaitForEndOfFrame());
        }
    }
        public static void SerializeProperties(this IDContainer container, XElement x)
        {
            foreach (var element in container)
            {
                if (element.GetType().IsGenericType&& (element.GetType().GetGenericTypeDefinition() == typeof(EditableProperty <>)))
                {
                    dynamic prop = element;

                    //HACK
                    if (element.GetType() == typeof(EditableProperty <Vector2D>))
                    {
                        var v = element as EditableProperty <Vector2D>;
                        var s = v.Value.x.ToString() + "," + v.Value.y.ToString();;
                        x.Add(new XAttribute(prop.Name, s));
                    }
                    else
                    {
                        x.Add(new XAttribute(prop.Name, prop.Value));
                    }
                }
            }
        }
        public static void DeserializeProperties(this IDContainer container, XElement data)
        {
            foreach (var element in container)
            {
                if (element.GetType().IsGenericType&& (element.GetType().GetGenericTypeDefinition() == typeof(EditableProperty <>)))
                {
                    var     type = element.GetType().GetGenericArguments()[0];
                    dynamic prop = element;

                    var attribute = data.Attribute(prop.Name);

                    //HACK
                    if (element.GetType() == typeof(EditableProperty <Vector2D>))
                    {
                        var v = attribute.Value.Split(',');
                        prop.Value = new Vector2D(double.Parse(v[0]), double.Parse(v[1]));
                    }
                    else
                    {
                        prop.Value = TypeDescriptor.GetConverter(type).ConvertFromString(null, CultureInfo.InvariantCulture, attribute.Value);
                    }
                }
            }
        }
Ejemplo n.º 8
0
 public static IIDItem GetIDItem(this IDContainer container, string relPath)
 {
     return(((IIDContainer)container).GetIDItem(relPath));
 }
Ejemplo n.º 9
0
 public IDContainerCellProvider(IDContainer idContainer)
 {
     FIDContainer = idContainer;
 }
Ejemplo n.º 10
0
    public bool ScheduleChange(MeshNetworkIdentity id, StateChange change)
    {
        IDContainer dummyContainer = new IDContainer();

        return(ScheduleChange(id, change, ref dummyContainer));
    }