示例#1
0
        public static ServiceCallback <string, NodeNetworkSceneTemplate> LookupScene(uint pSourceNodeId, string pSceneName)
        {
            ServiceCallback <string, NodeNetworkSceneTemplate> callback = new ServiceCallback <string, NodeNetworkSceneTemplate>(0, pSourceNodeId, null, GameTime.fixedTime);

            if (string.IsNullOrEmpty(pSceneName))
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_DATA;
                return(callback);
            }

            if (!IsInitialized)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_SERVICE_NOT_INITIALIZED;
                return(callback);
            }

            if (Instance.Manager == null || !Instance.Manager.HasNetworker || !Instance.Manager.Networker.IsConnected)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_CONNECTION;
                return(callback);
            }

            callback.RequestDataOfT = pSceneName;
            if (Instance.EnableLookupCaching)
            {
                NodeNetworkSceneTemplate nodeTemplate = Instance.GetCachedLookup(pSceneName);
                if (nodeTemplate != null)
                {
                    callback.State           = ServiceCallbackStateEnum.RESPONSE_SUCCESS;
                    callback.ResponseTime    = GameTime.fixedTime;
                    callback.ResponseDataOfT = nodeTemplate;
                    return(callback);
                }
            }

            callback.State = ServiceCallbackStateEnum.AWAITING_RESPONSE;
            Instance.AddPendingServiceCallback(callback);
            MainThreadManager.Run(() => {
                if (!IsInitialized || Instance.networkObject == null)
                {
                    return;
                }

                Instance.networkObject.SendRpc(RPC_LOOKUP_SCENE, Receivers.Server, callback.ToByteArray());
            });

            return(callback);
        }
示例#2
0
        public static ServiceCallback <RPCCreateNetworkSceneInNode, ServiceCallbackStateEnum> CreateNetworkSceneInNode(uint pSourceNodeId, uint pTargetNodeId, NetworkSceneTemplate pTemplate, bool pAutoAssignIp, bool pAutoAssignPort, byte[] pNetworkSceneMetaData)
        {
            ServiceCallback <RPCCreateNetworkSceneInNode, ServiceCallbackStateEnum> callback = new ServiceCallback <RPCCreateNetworkSceneInNode, ServiceCallbackStateEnum>(0, pSourceNodeId, GameTime.fixedTime);

            if (pTemplate == null)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_DATA;
                return(callback);
            }

            if (!IsInitialized)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_SERVICE_NOT_INITIALIZED;
                return(callback);
            }

            if (Instance.Manager == null || !Instance.Manager.HasNetworker || !Instance.Manager.Networker.IsConnected)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_CONNECTION;
                return(callback);
            }

            RPCCreateNetworkSceneInNode requestData = new RPCCreateNetworkSceneInNode()
            {
                targetNodeId = pTargetNodeId, template = pTemplate.ToRPC(), autoAssignIp = pAutoAssignIp, autoAssignPort = pAutoAssignPort, networkSceneMetaData = pNetworkSceneMetaData
            };

            callback.RequestDataOfT = requestData;
            callback.State          = ServiceCallbackStateEnum.AWAITING_RESPONSE;
            Instance.AddPendingServiceCallback(callback);
            MainThreadManager.Run(() => {
                if (!IsInitialized || Instance.networkObject == null)
                {
                    return;
                }

                Instance.networkObject.SendRpc(RPC_RELAY_CREATE_NETWORK_SCENE_IN_NODE, Receivers.Server, callback.ToByteArray());
            });

            return(callback);
        }
示例#3
0
        public static ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> InstantiateInNode(uint pSourceNodeId, uint pTargetNodeId, string pSceneName, int pCreateCode, IRPCSerializable pBehaviorData, Vector3?pPosition, Quaternion?pRotation, bool pSendTransform)
        {
            ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum> callback = new ServiceCallback <RPCInstantiateInNode, ServiceCallbackStateEnum>(0, pSourceNodeId, GameTime.fixedTime);

            if (!IsInitialized)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_SERVICE_NOT_INITIALIZED;
                return(callback);
            }

            if (Instance.Manager == null || !Instance.Manager.HasNetworker || !Instance.Manager.Networker.IsConnected)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_CONNECTION;
                return(callback);
            }

            RPCInstantiateInNode requestData = new RPCInstantiateInNode()
            {
                targetNodeId = pTargetNodeId, sceneName = pSceneName, createCode = pCreateCode, sendTransform = pSendTransform
            };

            if (pBehaviorData != null)
            {
                requestData.behaviorData = pBehaviorData.ToByteArray();
            }

            if (pPosition != null)
            {
                requestData.position = pPosition.Value.ToRPC();
            }

            if (pRotation != null)
            {
                requestData.rotation = pRotation.Value.ToRPC();
            }

            callback.RequestDataOfT = requestData;
            callback.State          = ServiceCallbackStateEnum.AWAITING_RESPONSE;
            Instance.AddPendingServiceCallback(callback);
            MainThreadManager.Run(() => {
                if (!IsInitialized || Instance.networkObject == null)
                {
                    return;
                }

                Instance.networkObject.SendRpc(RPC_RELAY_INSTANTIATE_IN_NODE, Receivers.Server, callback.ToByteArray());
            });

            return(callback);
        }
示例#4
0
        public static ServiceCallback <string, ServiceCallbackStateEnum> UnregisterScene(uint pSourceNodeId, bool pRequireConfirmation, string pSceneName)
        {
            ServiceCallback <string, ServiceCallbackStateEnum> callback = new ServiceCallback <string, ServiceCallbackStateEnum>(0, pSourceNodeId, GameTime.fixedTime);

            if (string.IsNullOrEmpty(pSceneName))
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_DATA;
                return(callback);
            }

            if (!IsInitialized)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_SERVICE_NOT_INITIALIZED;
                return(callback);
            }

            if (Instance.Manager == null || !Instance.Manager.HasNetworker || !Instance.Manager.Networker.IsConnected)
            {
                callback.State = ServiceCallbackStateEnum.ERROR_NO_CONNECTION;
                return(callback);
            }

            callback.RequestDataOfT = pSceneName;
            if (pRequireConfirmation)
            {
                callback.ResponseDataOfT = ServiceCallbackStateEnum.AWAITING_RESPONSE;
                Instance.AddPendingServiceCallback(callback);
            }
            else
            {
                callback.State           = ServiceCallbackStateEnum.RESPONSE_SUCCESS;
                callback.ResponseTime    = GameTime.fixedTime;
                callback.ResponseDataOfT = callback.State;
            }

            MainThreadManager.Run(() => {
                if (!IsInitialized || Instance.networkObject == null)
                {
                    return;
                }

                Instance.networkObject.SendRpc(RPC_UNREGISTER_SCENE, Receivers.Server, pRequireConfirmation, callback.ToByteArray());
            });

            return(callback);
        }