私は初心者のプログラマーで、なぜこれが機能していないのか理解できない。 私は "ConnectedClientList" クラスを持っている:なぜ変数が更新されていないのかを理解するのに苦労する
public class ConnectedClientList
{
static readonly object _lock = new object();
public static IList<ClientPeer> ConnectedClientPeers;
static ConnectedClientList()
{
ConnectedClientPeers = new List<ClientPeer>();
}
public static IList<ClientPeer> GetClientPeers()
{
lock (_lock)
{
return ConnectedClientPeers;
}
}
public static void AddClientPeerToConnectedList(ClientPeer client)
{
lock (_lock)
{
ConnectedClientPeers.Add(client);
}
}
public void RemoveClientPeerFromConnectedList(ClientPeer client)
{
ConnectedClientPeers.Remove(client);
}
}
私は別のクラスでは、この持っている:私は構築しようとしています
public CharacterUpdateEventHandler(ILogger logger)
{
Logger = logger;
IFiber testFiber = new ThreadFiber();
testFiber.Start();
testFiber.ScheduleOnInterval(SendUpdateEventToClients, 1000, 5000);
}
public void SendUpdateEventToClients()
{
if(ConnectedClientList.GetClientPeers() != null)
Logger.InfoFormat("# of connected client peers: {0}", ConnectedClientList.GetClientPeers().Count);
else
{
Logger.InfoFormat("ConnectedClientPeers is null");
}
}
:
ClientPeer clientPeer = new ClientPeer(request, Logger, _clientHandlerRegistry);
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Logger.InfoFormat("Added clientpeer to list. Count is now: {0}", ConnectedClientList.ConnectedClientPeers.Count);
をそして最終的に私はこれを持っていますサーバーはExitgameのPhoton Serverを使用しています。最初にクライアントピアを作成し、それを「ConnectedClientPeers」に追加すると、すぐに「ConnectedClientPeers」リストに実際に1のカウントがあるというデバッグ情報が表示されます。
実行中のスレッドは次のようです"SendUpdateEventToClients"をうまく繰り返すが、その関数のデバッグメッセージは常に "ConnectedClientPeers"リストのカウントが0であることを示している。
私は気付いていないだろうが、渡された数日間の解決策を見つける運がなかった助けやアドバイスをいただければ幸いです。ありがとう!
-Jarryd
--Edit--
私は、クラス全体を静的にするためにクラスを更新し、それでも同じ問題を抱えています。
public static class ConnectedClientList
{
static readonly object _lock = new object();
public static readonly IList<ClientPeer> ConnectedClientPeers;
static ConnectedClientList()
{
ConnectedClientPeers = new List<ClientPeer>();
}
public static IList<ClientPeer> GetClientPeers()
{
lock (_lock)
{
return ConnectedClientPeers;
}
}
public static void AddClientPeerToConnectedList(ClientPeer client)
{
lock (_lock)
{
ConnectedClientPeers.Add(client);
}
}
public static void RemoveClientPeerFromConnectedList(ClientPeer client)
{
ConnectedClientPeers.Remove(client);
}
}
マイデバッグ・ログ: 2016年8月8日14:27:21771 [ThreadFiber-1] INFO [CharacterUpdateEventHandler] [55] [(ヌル)] - 接続されたクライアントピアの#:0
2016-08-08 14:27:23,428 INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されたクライアントピア数:0
2016-08-08 14:27:26,771 [ThreadFiber-1] INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されたクライアントピア数:0
2016-08-08 14:27:28,443 [ThreadFiber-2] INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されたクライアントピア数:0
2016-08-08 14:27:31,774 [ThreadFiber-1] INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されているクライアントピア数:0
2016-08-08 14:27:33,453 [ThreadFiber-2] INFO [CharacterUpdateEventHandler] [55 ] [(null)] - 接続されたクライアントピア数:0
2016-08-08 14:27:36,787 [ThreadFiber-1] INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されたクライアントの数同僚:0
2016-08-08 14: 27:38,465 [ThreadFiber-2] INFO [CharacterUpdateEventHandler] [55] [(null)] - 接続されているクライアントピア数:0
あなたがAddClientPeerToConnectedListを呼び出す他のクラスであるあなたはそれが同じConnectedClientListオブジェクトを参照している、または新しいなかったことを確信していることを示しています別のものをアップする? – GreatJobBob
これは、私が問題が起こっている可能性があると考えているため、変数を静的にしてしまった理由です。それとも静的な仕組みではないのですか?私が上に投稿したすべてのもの、私は何も残さなかった。私は当初クラス全体を静的なものとして扱いましたが、違いは見られませんでした。 – Jarryd
私はクラス全体を静的にしましたが、違いはありません。私は私の最初の投稿を更新し、私のデバッグログの小さな部分だけでなく、下部に静的なクラスを追加しました。ログは同じことで5秒ごとに繰り返されます。 – Jarryd