Ejemplo n.º 1
0
    public void Host(string hostName, int port = 0)
    {
        _playerCamera.gameObject.SetActive(true);

        _ramnet.MessageRouter.ClearHandlers();
        _ramnet.MessageRouter
        .RegisterHandler <BasicMessage.Ping>(OnClientClockSyncRequest)
        .RegisterHandler <BasicMessage.ToObject>((connectionId, endpoint, message, reader) => {
            _ramnet.ReplicatedObjectStore.DispatchMessage(connectionId, message.ReceiverId,
                                                          reader);
        });

        _ramnet.GroupRouter.ClearConnectionHandlers();
        _ramnet.GroupRouter.SetConnectionHandler(NetworkGroup.Default, this);

        var hostConfig = new NetPeerConfiguration("RigidbodyParty");

        hostConfig.Port = port;
        hostConfig.MaximumConnections        = 64;
        hostConfig.AcceptIncomingConnections = true;
        _transporter.Open(hostConfig);

        foreach (var preExistingObject in _ramnet.PreExistingObjects)
        {
            var gameObject = preExistingObject.Value;
            Debug.Log("replicating existing instance " + gameObject + " under id " + preExistingObject.Key);
            _replicator.AddPreExistingInstance(ObjectRole.Authority, ConnectionId.NoConnection, gameObject, preExistingObject.Key);
        }

        _facilitatorRegistration  = _coroutineScheduler.Run(_ramnet.NatFacilitatorConnection.Register());
        _masterServerRegistration = _coroutineScheduler.Run(RegisterAtMasterServer(hostName));

        _isStarted = true;
        if (OnStarted != null)
        {
            OnStarted();
        }
    }