一意のIDとIDセッションに基づいて接続するユーザーをマップする方法を知りたいので、そのIDに対して3つ以上のセッションがある場合、最初に接続したユーザーはハッシュマップから削除されます。挿入順序でHashMap値を追加および削除する方法
例:
UserID:3 Session:1980002
UserID:3 Session:2841111
UserID:3 Session:84848
ユーザーIDが既に3つのアクティブなセッションが含まれ、最も古いものが削除され、KillSessionは新しいへの道を与えて、呼び出されました。
UserID:3 Session:2841111
UserID:3 Session:84848
UserID:3 Session:4848880
コード:
public void onHTTPCupertinoStreamingSessionCreate(HTTPStreamerSessionCupertino httpSession) {
String User_Session = httpSession.getSessionId();
String Client_ID = httpSession.getProperties().getPropertyStr("sql_client_id");
/* Verifies that there are already 3 active sessions and removes the oldest,
since the limit of simultaneous sessions is 3 for each user,
and add to hashmap, Client_ID and User_Session */
}
public void onHTTPCupertinoStreamingSessionDestroy(IHTTPStreamerSession httpSession) {
String User_Session = httpSession.getSessionId();
//remove from hashmap, Client_ID based on session User_Session
}
public void KillSession(int SessionId){
IApplicationInstance Instance = applicationInstance;
IHTTPStreamerSession sessions = Instance.getHTTPStreamerSessions().get(SessionId);
sessions.rejectSession();
//remove from hashmap, Client_ID based on session User_Session
}
CLIENT_IDは、データベース内のユーザーのIDで、User_Sessionはwowzaに固有のセッションで接続ごとに生成、このセッションは、同じ値を持っていません、つまり、同じClient_IDが複数回接続されている場合、その値はセッションごとに異なります。
つまり、基本的に私の難しさはハッシュマップをマウントすることです。どうすればいいですか?
わかりません。ユーザIDはあなたのマップのキー( 'HashMap'か他の型かどうか)ですか?もしそうなら、マップの値として 'ArrayDeque'を提案します。 'ArrayDeque'のサイズがすでに3の場合は、最初のセッションを取り出して終了し、最後に新しいセッションを追加します。 map値の型に 'Queue 'を使用するだけで、実際のインスタンスには 'ArrayDeque 'を使用することができます。 –
'HashMap'または 'HashMap 'は、あるユーザーIDから3つのセッションIDにマップできません。各キーは一度しか保持できず、そのキーの値は1つのみです。 –