/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuNetResolver.NT.hpp Date: 2022-8-17 Author: Reece ***/ #pragma once #include "AuNetSocketOverlappedOperation.hpp" #include "AuNetSocket.hpp" namespace Aurora::IO::Net { struct Socket; struct NetResolver : SocketOverlappedOperation, IResolver, AuEnableSharedFromThis { NetResolver(const AuSPtr &pWorker); NetResolver(const AuSPtr &pWorker, const AuSPtr, NetError>> &pCompletion); ~NetResolver(); bool bA {}; bool bAAAA {}; AuString hostname; bool Start(); void SetCompletion(const AuSPtr, NetError>> &callback); void OnOverlappedComplete() override; void OnOverlappedFailure(const NetError &error) override; bool HasFinished() override; void Cancel() override; const NetError &GetError() override; bool Unpack(); private: AuSPtr pWorker_; AuList processedIps_; AuSPtr, NetError>> pCompletion_; bool bHasCompleted_ {}; PADDRINFOEXW resultHandle_ {}; NetError error_; HANDLE hName_ { NULL }; }; }