c# - Notify about changed variable in socket thread -
i have unity app works socket server:
public class server : monobehaviour { private string outdata; private string indata; public void writedata(string data){ outdata = data; } void start() { threadstart ts = new threadstart(datahandler); mthread = new thread(ts); mthread.start(); } void datahandler() { tcplistener listener = new tcplistener(port); listener.start(); while (true) { var client = listener.accepttcpclient(); new thread(() => { using (client) { var reader = new streamreader(client.getstream()); var writer = new streamwriter(client.getstream()); while (true) { indata = reader.readline(); if(outdata != null){ writer.writeline(outdata); writer.flush(); outdata = null; } } } }).start(); } } } i'm not familiar .net threading , can't figure out how make send data. when data comes socket thread wakes , indata field updates. when call writedata nothing happens. socket thread continue sleep until indata updates.
but when call writedata nothing happens. socket thread continue sleep until indata updates.
that's because thread blocking on indata = reader.readline();. sit there until receives data (or exception thrown). check outgoing data , send it.
reading data should left in separate thread have, there no need send data in thread. sending data not blocking call. data pushed local buffer, , @ point in future, os take care of rest. write method should more like:
public void writedata(string data) { foreach(streamwriter clientwriter in clientwriters) { clientwriter.writeline(outdata); clientwriter.flush(); } } where clientwriters list should maintained on connect/disconnect. there other ways write method, basically, need send outgoing data right away.
Comments
Post a Comment