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