//private void ImcomingThreadFunc() //{ // do // { // DoIncoming(); // System.Threading.Thread.Sleep(1); // } while (IsWorking_); //} public void DoOutgoing() { if (!CanFlush_) { return; } //lock (Socket_) //{ if (!Socket_.Connected) { return; } if (OutgoingBuffer_.Length != 0) { //发送 if (Socket_.Poll(0, System.Net.Sockets.SelectMode.SelectWrite)) { try { int sended = Socket_.Send(OutgoingBuffer_.Memory, OutgoingBuffer_.RdPtr(), OutgoingBuffer_.Length, System.Net.Sockets.SocketFlags.None); OutgoingBuffer_.RdPtr(sended); OutgoingBuffer_.Crunch(); TotalOutgoing_ += sended; CanFlush_ = false; } catch (System.Net.Sockets.SocketException se) { ClientLog.Instance.Log("Exception at DoOutgoing" + se.ErrorCode); LastError_ = se.ErrorCode; } } } //} }
public bool Reset() { if (!IsWorking_) { return(true); } bool hasData = false; while (IsConneted && LastError == 0) { if (Socket_.Poll(0, System.Net.Sockets.SelectMode.SelectRead)) { try { if (0 >= Socket_.Receive(IncomingBuffer_.Memory, IncomingBuffer_.WrPtr(), IncomingBuffer_.Space, System.Net.Sockets.SocketFlags.None)) { break; } else { hasData = true; } } catch (System.Net.Sockets.SocketException se) { ClientLog.Instance.Log("Exception at Reset" + se.ErrorCode); LastError_ = se.ErrorCode; break; } } else { break; } } IncomingBuffer_.Reset(); OutgoingBuffer_.Reset(); return(hasData); }