Ejemplo n.º 1
0
        protected virtual void OnCreateNetworkSceneInNode_ServerClient(RpcArgs pArgs)
        {
            byte[]             data        = pArgs.GetNext <byte[]>();
            RPCServiceCallback callbackRPC = data.ByteArrayToObject <RPCServiceCallback>();
            NetworkSceneItem   item;

            if (NodeManager.IsInitialized)
            {
                RPCCreateNetworkSceneInNode createNetworkSceneInNodeRPC = callbackRPC.data.ByteArrayToObject <RPCCreateNetworkSceneInNode>();
                NetworkSceneTemplate        template = new NetworkSceneTemplate(createNetworkSceneInNodeRPC.template);
                if (createNetworkSceneInNodeRPC.autoAssignIp)
                {
                    template.Settings.ServerAddress.Ip = NodeManager.Instance.MasterManager.Settings.ServerAddress.Ip;
                    template.Settings.ClientAddress.Ip = NodeManager.Instance.MasterManager.Settings.ClientAddress.Ip;
                }

                if (createNetworkSceneInNodeRPC.autoAssignPort)
                {
                    template.Settings.ServerAddress.Port = NodeManager.Instance.UsedDynamicPorts.PeekNext();
                    template.Settings.ClientAddress.Port = template.Settings.ServerAddress.Port;
                }

                item = NodeManager.Instance.CreateNetworkScene(template, false, createNetworkSceneInNodeRPC.networkSceneMetaData);
            }
            else
            {
                item = null;
            }

            callbackRPC.state = (item != null) ? ServiceCallbackStateEnum.RESPONSE_SUCCESS : ServiceCallbackStateEnum.RESPONSE_FAILED;
            callbackRPC.data  = null;
            networkObject.SendRpc(RPC_RELAY_CONFIRM_CREATE_NETWORK_SCENE_IN_NODE, Receivers.Server, callbackRPC.ObjectToByteArray());
        }
Ejemplo n.º 2
0
        protected virtual void OnRelayCreateNetworkSceneInNode_Server(RpcArgs pArgs)
        {
            // We relay the message to the right Node if possible
            byte[]                      data        = pArgs.GetNext <byte[]>();
            RPCServiceCallback          callbackRPC = data.ByteArrayToObject <RPCServiceCallback>();
            RPCCreateNetworkSceneInNode createNetworkSceneInNodeRPC = callbackRPC.data.ByteArrayToObject <RPCCreateNetworkSceneInNode>();
            NetworkingPlayer            networkingPlayer;

            if (!_nodeToNetworkingPlayer.TryGetValue(createNetworkSceneInNodeRPC.targetNodeId, out networkingPlayer))
            {
                callbackRPC.state = ServiceCallbackStateEnum.RESPONSE_FAILED;
                callbackRPC.data  = null;
                networkObject.SendRpc(pArgs.Info.SendingPlayer, RPC_CONFIRM_CREATE_NETWORK_SCENE_IN_NODE, callbackRPC.ObjectToByteArray());
                return;
            }

            networkObject.SendRpc(networkingPlayer, RPC_CREATE_NETWORK_SCENE_IN_NODE, data);
        }
Ejemplo n.º 3
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);
        }