void beginflush() { if(writing)return; write_n=sendbuffer.BeginDequeue(); if(write_n==-1) return; writing=true; st.BeginWrite(sendbuffer.GetPointer(write_n), Stream::Callback([this](void* v, Stream* s) { sendbuffer.EndDequeue(write_n); writing=false; beginflush(); })); }
void send(const BufferRef& buf) { if(buf.Length<=0)return; int tmp=sendbuffer.BeginAppend(); if(tmp<0) { WARN(2,"buffer overrun"); return; } Buffer& b=sendbuffer.GetPointer(tmp); b=Buffer(buf.Length); memcpy(b.Data, buf.Data, buf.Length); sendbuffer.EndAppend(tmp); beginflush(); }