我有一個多人遊戲並使用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:
@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();
}
}
}
然後我的服務器擴展代碼被稱爲在我的統一C#代碼:
SFSObject obj = new SFSObject();
obj.PutInt("playerCheckingInID", sfs.MySelf.Id);
sfs.Send(new ExtensionRequest("dealingHand", obj, sfs.LastJoinedRoom));
但是,當我查看我的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類有關?
編輯: 或者,這是否與同步線程?如果是這樣,那麼最好的管理方法是什麼?這是多人,回合制遊戲。總會有四名球員。發送到服務器分機的請求應按收到的順序進行管理。
如果您打算投票,您能解釋原因嗎? – jason
您在一臺設備或多臺設備上使用客戶端代碼? – Pirisok
我的意思是,您從統一呼叫的請求來自一臺設備或多臺設備? – Pirisok