无法理解为什么不更新变量
Trouble with understanding why a variable isn't being updated
I'm a novice programmer and am having trouble understanding why this isn't working.
I have a "ConnectedClientList" class:
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);
}
}
I have this in another class:
ClientPeer clientPeer = new ClientPeer(request, Logger, _clientHandlerRegistry);
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Logger.InfoFormat("Added clientpeer to list. Count is now: {0}", ConnectedClientList.ConnectedClientPeers.Count);
And then finally I have this:
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");
}
}
I am trying to build a server using Exitgame's Photon Server. When I first create the clientpeer and then add it to the "ConnectedClientPeers" I immediately have debug info saying that the "ConnectedClientPeers" list does in fact now have a count of 1.
The thread I'm 运行 seems to be repeating the "SendUpdateEventToClients" just fine, but the debug message in that function always says that my "ConnectedClientPeers" list has a count of 0.
I'm sure it's probably something simple I'm not aware of, but I haven't had any luck finding a solution for the passed couple of days. Any help or advice is greatly appreciated.谢谢!
-Jarryd
--Edit--
I updated the class to make the entire class static, but still have the same problem.
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);
}
}
My debug log:
2016-08-08 14:27:21,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:23,428 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:26,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:28,443 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:31,774 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:33,453 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:36,787 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:38,465 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
不确定如何在评论中post编码,你的这么多代码看起来不错
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
ClientPeer clientPeer = new ClientPeer();
clientPeer.MyProperty = 5;
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
clientPeer = new ClientPeer();
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
}
public class ClientPeer
{
public int MyProperty { get; set; }
}
public static 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);
}
}
}
}
}
所以这只是添加了 3 个对等点并显示计数并显示确实有 3
I'm a novice programmer and am having trouble understanding why this isn't working. I have a "ConnectedClientList" class:
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);
}
}
I have this in another class:
ClientPeer clientPeer = new ClientPeer(request, Logger, _clientHandlerRegistry);
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Logger.InfoFormat("Added clientpeer to list. Count is now: {0}", ConnectedClientList.ConnectedClientPeers.Count);
And then finally I have this:
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");
}
}
I am trying to build a server using Exitgame's Photon Server. When I first create the clientpeer and then add it to the "ConnectedClientPeers" I immediately have debug info saying that the "ConnectedClientPeers" list does in fact now have a count of 1.
The thread I'm 运行 seems to be repeating the "SendUpdateEventToClients" just fine, but the debug message in that function always says that my "ConnectedClientPeers" list has a count of 0.
I'm sure it's probably something simple I'm not aware of, but I haven't had any luck finding a solution for the passed couple of days. Any help or advice is greatly appreciated.谢谢!
-Jarryd
--Edit--
I updated the class to make the entire class static, but still have the same problem.
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);
}
}
My debug log: 2016-08-08 14:27:21,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:23,428 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:26,771 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:28,443 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:31,774 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:33,453 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:36,787 [ThreadFiber-1] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
2016-08-08 14:27:38,465 [ThreadFiber-2] INFO [ CharacterUpdateEventHandler][ 55] [(null)] - # of connected client peers: 0
不确定如何在评论中post编码,你的这么多代码看起来不错
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
ClientPeer clientPeer = new ClientPeer();
clientPeer.MyProperty = 5;
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
clientPeer = new ClientPeer();
ConnectedClientList.AddClientPeerToConnectedList(clientPeer);
Console.WriteLine(ConnectedClientList.ConnectedClientPeers.Count.ToString());
}
public class ClientPeer
{
public int MyProperty { get; set; }
}
public static 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);
}
}
}
}
}
所以这只是添加了 3 个对等点并显示计数并显示确实有 3