2

単純なカウンターで割り当てられたIDを取得するセッションがある状況にあります。さて、多くの接続の後、接続されているのは2人だけかもしれませんが、カウンターは500になります。私がやりたいのは、番号を無料としてフラグを立てて再利用できるようにするカウンターを用意することです。でも、どうやってこれに取り組むのかわかりません。あなたの一人が私を助けてくれることを願っています!

public void createSession(Socket gameClient)
{
    uint sessionID = mSessionCounter++;
    Session Session = new Session(sessionID, gameClient);
    mSessions.Add(sessionID, Session);
    CommandLine.WriteLine("Created session " + sessionID + " for " + Session.ipAddress, CommandLine.logType.sessionConnectionEvent);
    Session.Start();
}
4

1 に答える 1

2

誰がこれを行うことができるかについての簡単なアイデア。あなたの場合、再利用は必要ないかもしれませんが、それでも方法を知る価値があるかもしれません(そしてこの質問への答えがあると良いでしょう)。

どのセッションIDが使用されているかをいつでも確認する必要がある場合は、それらを追跡できる必要があります。このために、私は単純なListものでうまくいくことを提案するので、次のようなものから始めましょう:

static List<int> CurrentSessionIDs = new List<int>();

これはグローバルにアクセス可能である必要があります。このリストをクリーンに保つために、「生き続ける」ことをチェックする関数で、次のようなアイテムを削除できます。

CurrentSessionIDs.Remove(sessionID);

次に、リストを例外リストとして使用して、最初に使用可能なセッション番号を計算します。これは、Linqを使用して次のように実行できます。

//this would start at 0 for the first session number
int newSessionNumber = Enumerable.Range(0, int.MaxValue).Except(CurrentSessionIDs).First();

注:最初に利用可能な番号を見つけるためのこのちょっとした素敵なLinq構文は、この投稿に触発されました(期限が来たクレジットなど)

于 2012-11-22T15:56:20.140 に答える