i have server set listen on port clients, if find 1 add them client array , listen them thread there.
console.write("max players: "); maxplayers = int32.parse(console.readline()); clients = new tcpclient[maxplayers]; playercount = 0; formatter = new binaryformatter(); server = new tcplistener(ipaddress.parse("192.168.1.33"), 7777); server.start(); while (true) { if (server.pending() && playercount < maxplayers) { console.writeline("found client"); clients[playercount] = server.accepttcpclient(); // client connection //when 1 player joins, should start thread playercount of 0 thread t = new thread(() => listenclient(playercount)); t.start(); playercount++; } } public static void listenclient(int index) { while (true) { networkstream stream = clients[index].getstream(); object obj = formatter.deserialize(stream); if (obj != null) { console.writeline(obj); } } } however, when 1 player joins, thread called , passed argument of 1, not 0 reason. issue here?
well, that's how lambda works. try instead:
while (true) { if (server.pending() && playercount < maxplayers) { console.writeline("found client"); clients[playercount] = server.accepttcpclient(); // client connection //when 1 player joins, should start thread playercount of 0 int currentplayerscount = playercount; thread t = new thread(() => listenclient(currentplayerscount)); t.start(); playercount++; } } edit:
as accepted answer, should mentioned davidg , andrey's posts below give additional important information closures, , should read full picture.
Comments
Post a Comment