私は、マルチプレイヤーでSmartFoxServerを使用するプロジェクトを持っています。私はサーバーエクステンションを書いていますが、ベストプラクティスが何であるか分かりません。私はいくつかの奇妙な行動を見ています。これが私のクラスをどのようにセットアップしたのかが原因であるかどうかはわかりません。Unity3d Single_Instanceクラスを使用する場合
public class MyExtension extends SFSExtension
{
private int numberOfPlayersReady = 0;
@Override
public void init()
{
addRequestHandler("dealingHand",MoveHandler.class);
}
//...some code
public int getNumberOfPlayersReady(){
return numberOfPlayersReady;
}
void setNumberOfPlayersReady(){
numberOfPlayersReady++;
}
}
MoveHandler.java:
SFSObject obj = new SFSObject();
obj.PutInt("playerCheckingInID", sfs.MySelf.Id);
sfs.Send(new ExtensionRequest("dealingHand", obj, sfs.LastJoinedRoom));
:その後、私のサーバ拡張コードは次のように私のユニティC#コードで呼ばれている
@Instantiation(InstantiationMode.SINGLE_INSTANCE)
public class MoveHandler extends BaseClientRequestHandler{
@Override
public void handleClientRequest(User user, ISFSObject params)
{
MyExtension gameExt = (MyExtension) getParentExtension();
int currentNumber = gameExt.getNumberOfPlayersReady();
trace("another player is ready " + currentNumber);
if(currentNumber == 3){
//do something
}else{
int newCurrentNumber = (int)currentNumber + 1;
gameExt.setNumberOfPlayersReady();
}
}
}
私の拡張機能では、私はこのようなメインクラスを持っています
しかし、私のSmartFoxServerスタンドアロンコマンドラインを見て、トレースを見ると、私は参照してください:
"another player is ready 0"
"another player is ready 0"
"another player is ready 0"
"another player is ready 3"
私が見るであろうと想像します:
"another player is ready 0"
"another player is ready 1"
"another player is ready 2"
"another player is ready 3"
は、誰もがここで起こっていただきました!私が知っていることはできますか?これはSingle_Instanceクラスの使用と関係がありますか?
編集: または、これはスレッドの同期と関係がありますか?もしそうなら、それを管理する最善の方法は何ですか?これは、マルチプレイヤー、ターンベースのゲームです。常に4人の選手がいます。 Server Extensionに送信される要求は、受信した順に管理する必要があります。
票を落とす場合は、理由を説明できますか? – jason
クライアントコードは、1つのデバイスまたは複数のデバイスで使用しますか? – Pirisok
私は、あなたが団結して呼び出す要求は、1つのデバイスまたは複数のデバイスからのものであることを意味しますか? – Pirisok