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()); }
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); }
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); }