Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 光子螺栓|创建后将空间设为私人空间_C#_Unity3d_Photon - Fatal编程技术网

C# 光子螺栓|创建后将空间设为私人空间

C# 光子螺栓|创建后将空间设为私人空间,c#,unity3d,photon,C#,Unity3d,Photon,我知道如何私下玩这个游戏 BoltLauncher.StartSinglePlayer 但这一次,我想知道的不是离线玩游戏,而是如何让房间成为私人空间,这样就没有更多玩家可以加入 我将IsOpen设置为false,并在玩家想要时将其保密,但其他客户可以加入房间 有人知道如何在服务器所有者想要设置私有时设置私有吗?将接受模式设置为手动 重写ConnectRequest以检查您必须跟踪的任何变量会话是否应该是私有的,并调用BoltNetwork。如果会话应该是私有的,或者如果应该允许连接,则拒绝B

我知道如何私下玩这个游戏

BoltLauncher.StartSinglePlayer

但这一次,我想知道的不是离线玩游戏,而是如何让房间成为私人空间,这样就没有更多玩家可以加入

我将
IsOpen
设置为false,并在玩家想要时将其保密,但其他客户可以加入房间


有人知道如何在服务器所有者想要设置私有时设置私有吗?

将接受模式设置为手动

重写
ConnectRequest
以检查您必须跟踪的任何变量会话是否应该是私有的,并调用
BoltNetwork。如果会话应该是私有的,或者如果应该允许连接,则拒绝
BoltNetwork。接受

private bool serverShouldBePrivateNow; 

// ...

public override void ConnectRequest(UdpEndPoint endpoint, Bolt.IProtocolToken token) {
    bool connectionShouldBeRejected = false;

    connectionShouldBeRejected = connectionShouldBeRejected || serverShouldBePrivateNow;

    // any other appropriate checks go here
    // connectionShouldBeRejected = connectionShouldBeRejected || ...; 
    // connectionShouldBeRejected = connectionShouldBeRejected || ...; 
    // connectionShouldBeRejected = connectionShouldBeRejected || ...; 
   
    if (connectionShouldBeRejected)
    {
        BoltNetwork.Refuse(endpoint);
    }
    else
    {
        BoltNetwork.Accept(endpoint);
    }
}

如果需要将数据返回到客户端(例如解释拒绝连接的确切原因),可以使用
BoltNetwork.reject(UdpEndPoint endpoint,IProtocolToken refuseToken)使用令牌进行响应

  • 定义
    IProtocolToken
  • ConnectRequest
    中的服务器代码上使用它:
  • 在客户机代码的
    void connectseeded(UdpEndPoint端点,Bolt.IProtocolToken令牌)
    中检查它:
  • 有关更多信息,请参阅

    using UdpKit;
    
    public class RequestToken : Bolt.IProtocolToken
    {
        public enum RefuseReason {privateReason1, privateReason2}
    
        // other reasons go here 
        public RefuseReason reason { get; set; }
    
        public void Read(UdpPacket packet)
        {
            this.reason = (RefuseReason)packet.ReadInt();
        }
    
        public void Write(UdpPacket packet)
        {
            packet.WriteInt((int)this.reason);
        }
    }
    
    public override void ConnectRequest(UdpEndPoint endpoint, Bolt.IProtocolToken token) {
        bool connectionShouldBeRejected = false;
    
        connectionShouldBeRejected = connectionShouldBeRejected || serverShouldBePrivateNow;
    
        if (connectionShouldBeRejected)
        {
            RequestToken token = new RequestToken();
            if (serverShouldBePrivateNow)
            { 
                token.reason = RequestToken.RefuseReason.privateReason1;
            } 
            else 
            {
                token.reason = RequestToken.RefuseReason.privateReason2;
            }
    
            BoltNetwork.Refuse(endpoint, token);
        }
        else
        {
            BoltNetwork.Accept(endpoint);
        }
    } 
    
    public override void ConnectRefused(UdpEndpoint endpoint, Bolt.IProtocolToken token)
    {
        Debug.Assert(token is RequestToken);
        RequestToken reqTok = (RequestToken)token;
    
        switch (token.reason)
        {
        case RequestToken.RefuseReason.privateReason1:
            // handle private Reason 1 
            break;
        case RequestToken.RefuseReason.privateReason2:
            // handle private Reason 2
            break;
        default:
            // handle error in packet
            Debug.Assert(false, "Undefined value for enum"); 
        }
    }