このタスクは、WebSocket を使用して簡単に実行できます。以下はBristleback Serverを使用して記述された必要なアプリケーション コードです(新しいユーザーが接続するときにチェックが実行されると仮定します)。
@Component
public class CountUsersConnectionListeners implements ConnectionStateListener<DefaultUser> {
private static final int MAGIC_MAXIMUM_NUMBER_OF_USERS = 2;
private int numberOfCurrentlyConnected;
@Autowired
private ConnectionCountClientClass connectionCountClientClass;
@Override
public void userConnected(DefaultUser defaultUser) {
if (numberOfCurrentlyConnected > MAGIC_MAXIMUM_NUMBER_OF_USERS) {
connectionCountClientClass.showButtonToNewUser(defaultUser);
numberOfCurrentlyConnected++;
return;
}
numberOfCurrentlyConnected++;
if (numberOfCurrentlyConnected > MAGIC_MAXIMUM_NUMBER_OF_USERS) {
connectionCountClientClass.showButton(true);
}
}
@Override
public void userDisconnected(DefaultUser defaultUser) {
if (numberOfCurrentlyConnected <= MAGIC_MAXIMUM_NUMBER_OF_USERS) {
numberOfCurrentlyConnected--;
return;
}
numberOfCurrentlyConnected--;
if (numberOfCurrentlyConnected <= MAGIC_MAXIMUM_NUMBER_OF_USERS) {
connectionCountClientClass.hideButton(true);
}
}
}
これは単なるプロトタイプであることに注意してください。同期については気にしませんでした。実際の接続ユーザー数を設定するコードは別の場所に置くことができます。
@ClientActionClass
@Component
public class ConnectionCountClientClass {
@ClientAction
public SendCondition showButton(boolean show) {
return AllUsersCondition.getInstance(); // this will send a message to all connected users
}
@ClientAction
public SendCondition hideButton(boolean hide) {
return AllUsersCondition.getInstance(); // this will send a message to all connected users
}
@ClientAction
public DefaultUser showButtonToNewUser(DefaultUser defaultUser) {
return defaultUser; // this will send a message only to the user given as parameter
}
}
クライアント側 (追加のアプリケーション コードのみ表示):
var sampleClientAction = {
showButton: function() {
alert("Show button!");
},
showButtonToNewUser: function() {
alert("Show me button!");
},
hideButton: function() {
alert("Hide button!");
}
};
dataController.registerClientActionClass("ConnectionCountClientClass", sampleClientAction);
興味があれば、作業中のアプリケーション全体をお送りします [Maven が必要です]。Jetty または Tomcat を Web アプリケーション コンテナーとして使用できます。