123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #include "io_service_impl.h"
- #include "deadline_timer_impl.h"
- #include "tcp_socket_impl.h"
- #include "tcp_acceptor_impl.h"
- using namespace NDns;
- using namespace NAsio;
- namespace NAsio {
- TIOService::TWork::TWork(TWork& w)
- : Srv_(w.Srv_)
- {
- Srv_.GetImpl().WorkStarted();
- }
- TIOService::TWork::TWork(TIOService& srv)
- : Srv_(srv)
- {
- Srv_.GetImpl().WorkStarted();
- }
- TIOService::TWork::~TWork() {
- Srv_.GetImpl().WorkFinished();
- }
- TIOService::TIOService()
- : Impl_(new TImpl())
- {
- }
- TIOService::~TIOService() {
- }
- void TIOService::Run() {
- Impl_->Run();
- }
- size_t TIOService::GetOpQueueSize() noexcept {
- return Impl_->GetOpQueueSize();
- }
- void TIOService::Post(TCompletionHandler h) {
- Impl_->Post(std::move(h));
- }
- void TIOService::Abort() {
- Impl_->Abort();
- }
- TDeadlineTimer::TDeadlineTimer(TIOService& srv) noexcept
- : Srv_(srv)
- , Impl_(nullptr)
- {
- }
- TDeadlineTimer::~TDeadlineTimer() {
- if (Impl_) {
- Srv_.GetImpl().ScheduleOp(new TUnregisterTimerOperation(Impl_));
- }
- }
- void TDeadlineTimer::AsyncWaitExpireAt(TDeadline deadline, THandler h) {
- if (!Impl_) {
- Impl_ = new TDeadlineTimer::TImpl(Srv_.GetImpl());
- Srv_.GetImpl().ScheduleOp(new TRegisterTimerOperation(Impl_));
- }
- Impl_->AsyncWaitExpireAt(deadline, h);
- }
- void TDeadlineTimer::Cancel() {
- Impl_->Cancel();
- }
- TTcpSocket::TTcpSocket(TIOService& srv) noexcept
- : Srv_(srv)
- , Impl_(new TImpl(srv.GetImpl()))
- {
- }
- TTcpSocket::~TTcpSocket() {
- }
- void TTcpSocket::AsyncConnect(const TEndpoint& ep, TTcpSocket::TConnectHandler h, TDeadline deadline) {
- Impl_->AsyncConnect(ep, h, deadline);
- }
- void TTcpSocket::AsyncWrite(TSendedData& d, TTcpSocket::TWriteHandler h, TDeadline deadline) {
- Impl_->AsyncWrite(d, h, deadline);
- }
- void TTcpSocket::AsyncWrite(TContIOVector* vec, TWriteHandler h, TDeadline deadline) {
- Impl_->AsyncWrite(vec, h, deadline);
- }
- void TTcpSocket::AsyncWrite(const void* data, size_t size, TWriteHandler h, TDeadline deadline) {
- class TBuffers: public IBuffers {
- public:
- TBuffers(const void* theData, size_t theSize)
- : Part(theData, theSize)
- , IOVec(&Part, 1)
- {
- }
- TContIOVector* GetIOvec() override {
- return &IOVec;
- }
- IOutputStream::TPart Part;
- TContIOVector IOVec;
- };
- TSendedData d(new TBuffers(data, size));
- Impl_->AsyncWrite(d, h, deadline);
- }
- void TTcpSocket::AsyncRead(void* buff, size_t size, TTcpSocket::TReadHandler h, TDeadline deadline) {
- Impl_->AsyncRead(buff, size, h, deadline);
- }
- void TTcpSocket::AsyncReadSome(void* buff, size_t size, TTcpSocket::TReadHandler h, TDeadline deadline) {
- Impl_->AsyncReadSome(buff, size, h, deadline);
- }
- void TTcpSocket::AsyncPollRead(TTcpSocket::TPollHandler h, TDeadline deadline) {
- Impl_->AsyncPollRead(h, deadline);
- }
- void TTcpSocket::AsyncPollWrite(TTcpSocket::TPollHandler h, TDeadline deadline) {
- Impl_->AsyncPollWrite(h, deadline);
- }
- void TTcpSocket::AsyncCancel() {
- return Impl_->AsyncCancel();
- }
- size_t TTcpSocket::WriteSome(TContIOVector& d, TErrorCode& ec) noexcept {
- return Impl_->WriteSome(d, ec);
- }
- size_t TTcpSocket::WriteSome(const void* buff, size_t size, TErrorCode& ec) noexcept {
- return Impl_->WriteSome(buff, size, ec);
- }
- size_t TTcpSocket::ReadSome(void* buff, size_t size, TErrorCode& ec) noexcept {
- return Impl_->ReadSome(buff, size, ec);
- }
- bool TTcpSocket::IsOpen() const noexcept {
- return Native() != INVALID_SOCKET;
- }
- void TTcpSocket::Shutdown(TShutdownMode what, TErrorCode& ec) {
- return Impl_->Shutdown(what, ec);
- }
- SOCKET TTcpSocket::Native() const noexcept {
- return Impl_->Fd();
- }
- TEndpoint TTcpSocket::RemoteEndpoint() const {
- return Impl_->RemoteEndpoint();
- }
- //////////////////////////////////
- TTcpAcceptor::TTcpAcceptor(TIOService& srv) noexcept
- : Srv_(srv)
- , Impl_(new TImpl(srv.GetImpl()))
- {
- }
- TTcpAcceptor::~TTcpAcceptor() {
- }
- void TTcpAcceptor::Bind(TEndpoint& ep, TErrorCode& ec) noexcept {
- return Impl_->Bind(ep, ec);
- }
- void TTcpAcceptor::Listen(int backlog, TErrorCode& ec) noexcept {
- return Impl_->Listen(backlog, ec);
- }
- void TTcpAcceptor::AsyncAccept(TTcpSocket& s, TTcpAcceptor::TAcceptHandler h, TDeadline deadline) {
- return Impl_->AsyncAccept(s, h, deadline);
- }
- void TTcpAcceptor::AsyncCancel() {
- Impl_->AsyncCancel();
- }
- }
|