internal void RegisterOnlineBehavior(OnlineBehavior onlineBehavior)
    {
        var sameObject = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject);

        if (sameObject.Count > 0)
        {
            Debug.LogError("double object");
        }
        m_onlineBehaviors.Add(onlineBehavior);
    }
 private void SendOnlineBehaviorFieldsUpdate(OnlineBehavior _obj)
 {
     using (MemoryStream m = new MemoryStream())
     {
         using (BinaryWriter w = new BinaryWriter(m))
         {
             w.Write(_obj.GetComponent <OnlineIdentity>().m_uid);
             _obj.Write(w);
             OnlineManager.Instance.SendMessage((byte)OnlineProtocol.Handler.ONLINE_OBJECT_FIELDS, m.GetBuffer());
         }
     }
 }
Exemple #3
0
    public override void OnInspectorGUI()
    {
        openreflection = EditorGUILayout.BeginFoldoutHeaderGroup(openreflection, "Sync Reflection");

        if (openreflection)
        {
            OnlineBehavior obj = (OnlineBehavior)target;
            var            syncedFieldsByScript = target.GetType().GetFields(BindingFlags.NonPublic
                                                                             | BindingFlags.Public
                                                                             | BindingFlags.FlattenHierarchy
                                                                             | BindingFlags.Instance
                                                                             | BindingFlags.Static)
                                                  .Where(prop => Attribute.IsDefined(prop, typeof(Sync))).ToArray();

            GUILayout.BeginHorizontal("fieldPopup");
            string[] fieldNames = target.GetType().GetFields(BindingFlags.NonPublic
                                                             | BindingFlags.Public
                                                             | BindingFlags.FlattenHierarchy
                                                             | BindingFlags.Instance
                                                             | BindingFlags.Static).Select(f => f.Name).ToArray();

            selectedField = EditorGUILayout.Popup("Fields", selectedField, fieldNames);
            if (GUILayout.Button("+", GUILayout.Width(20)))
            {
                obj.m_serializedFields.Add(fieldNames[selectedField]);
                EditorUtility.SetDirty(obj);
            }
            GUILayout.EndHorizontal();
            foreach (var f in syncedFieldsByScript)
            {
                GUILayout.BeginHorizontal("scriptfield");
                EditorGUILayout.LabelField(f.Name);
                EditorGUILayout.LabelField("(script)", GUILayout.Width(40));
                GUILayout.EndHorizontal();
            }
            foreach (var fname in obj.m_serializedFields)
            {
                GUILayout.BeginHorizontal("field");
                EditorGUILayout.LabelField(fname);
                bool b = GUILayout.Button("-", GUILayout.Width(20));
                GUILayout.EndHorizontal();
                if (b)
                {
                    obj.m_serializedFields.Remove(fname);
                    EditorUtility.SetDirty(obj);
                    break;
                }
            }
        }
        EditorGUILayout.EndFoldoutHeaderGroup();
        base.OnInspectorGUI();
    }
 private void SendOnlineBehaviorMethodsUpdate(OnlineBehavior _obj)
 {
     using (MemoryStream m = new MemoryStream())
     {
         using (BinaryWriter w = new BinaryWriter(m))
         {
             w.Write(_obj.Uid);
             w.Write(_obj.Index);
             _obj.WriteCMDs(w);
             _obj.WriteRPCs(w);
             OnlineManager.Instance.SendMessage((byte)OnlineProtocol.Handler.ONLINE_OBJECT_METHODS, m.GetBuffer());
         }
     }
 }
    internal void RegisterOnlineBehavior(OnlineBehavior onlineBehavior)
    {
        var sameObject = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject);

        if (sameObject != null)
        {
            onlineBehavior.m_index = sameObject.Count;
        }
        else
        {
            onlineBehavior.m_index = 0;
        }
        m_onlineBehaviors.Add(onlineBehavior);
    }
    internal int RegisterOnlineBehavior(OnlineBehavior onlineBehavior)
    {
        var duplicate = m_onlineBehaviors.FindAll(ob => ob.Uid == onlineBehavior.Uid && ob.gameObject != onlineBehavior.gameObject);

        if (duplicate.Count > 0)
        {
            OnlineManager.LogError("Online object already registered with the same Unique Id " + onlineBehavior.Uid +
                                   " first :" + duplicate[0] + " , second : " + onlineBehavior.name);
            return(-1);
        }

        var behaviors = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject);

        m_onlineBehaviors.Add(onlineBehavior);
        OnlineManager.Log("registering " + onlineBehavior.GetType().FullName + " with index " + behaviors.Count);
        return(behaviors.Count);
    }
 internal void UnregisterOnlineBehavior(OnlineBehavior onlineBehavior)
 {
     m_onlineBehaviors.Remove(onlineBehavior);
 }