SpiecsEngine
 
Loading...
Searching...
No Matches

◆ HandleWrite()

void Spices::Net::TcpConnection::HandleWrite ( )
private

Handle Write event.

Definition at line 114 of file TcpConnection.cpp.

115 {
116 if (m_Channel->IsWriting())
117 {
118 int saveErrno = 0;
119 size_t n = m_OutputBuffer.WriteFd(m_Channel->Fd(), &saveErrno);
120 if (n > 0)
121 {
123 if (m_OutputBuffer.ReadableBytes() == 0)
124 {
125 m_Channel->DisableWriting();
126 if (!m_WriteCompleteCallback.empty())
127 {
128 m_IoLoop->QueueInLoop([=]() { m_WriteCompleteCallback.Broadcast(shared_from_this()); });
129 }
130 if (m_State.load() == State::Disconnecting)
131 {
133 }
134 }
135 }
136 else
137 {
138 SPICES_CORE_ERROR("TcpConnection::HandleWrite Error")
139 }
140 }
141 else
142 {
143 SPICES_CORE_ERROR("TcpConnection::HandleWrite Error")
144 }
145 }
size_t WriteFd(SOCKET fd, int *saveErrno) const
Write to Socket.
Definition Buffer.cpp:72
size_t ReadableBytes() const
Get readable area bytes.
Definition Buffer.h:46
void Retrieve(size_t len)
Retrieve some buffer data from data area.
Definition Buffer.cpp:14
void QueueInLoop(Functor cb)
Execute functor in EventLoop thread.
Definition EventLoop.cpp:91
std::atomic< State > m_State
TcpConnection state.
Buffer m_OutputBuffer
Output Buffer.
DelegateWriteCompleteCallback m_WriteCompleteCallback
DelegateWriteCompleteCallback.
std::unique_ptr< Channel > m_Channel
TcpConnection channel.
EventLoop * m_IoLoop
io Loop from TcpServer::NewConnection.
void ShutDownInLoop() const
ShutDown socket.

References m_IoLoop, and ShutDownInLoop().