//============================================================================ // initNetworkReaderThread //============================================================================ static void initNetworkReaderThread(string tmpFile, NetworkStream pStream, TcpClient pClient) { networkThreadStartParams parms = new networkThreadStartParams(); parms.mNetworkBinaryFilename = tmpFile; parms.mNetworkStream = pStream; parms.mTCPClient = pClient; mNetworkReaderThread = new Thread(new ParameterizedThreadStart(readNetworkStream)); mNetworkReaderThread.Start(parms); }
//============================================================================ // ListenForClients //============================================================================ static private void readNetworkStream(object obj) { networkThreadStartParams pParms = (networkThreadStartParams)obj; FileStream lfs = null; try { lfs = new FileStream(pParms.mNetworkBinaryFilename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite); } catch (Exception ex) { } BinaryWriter bw = new BinaryWriter(lfs); int cMaxSizeToRead = 0x00FFFFFF; byte[] buff = new byte[cMaxSizeToRead]; mNumBytesWritten = 0; //spinloop on the network stream and write the data to a temp file. while (mIsRunning > 0) { try { if (mIsPaused == 1) { continue; } int totalBytesRead = pParms.mNetworkStream.Read(buff, 0, cMaxSizeToRead); bw.Write(buff, 0, totalBytesRead); //CLM this isn't atomic, or threadsafe, but worst case is the reader skips // a read cycle, which isn't bad at all. mNumBytesWritten += (ulong)totalBytesRead; } catch (Exception e) { } } bw.Flush(); lfs.Close(); bw.Close(); }