14 #if defined(KY_CONFIG_RELEASE) || !defined(KY_ENABLE_SOCKETS)
15 # define KY_DISABLE_VISUALDEBUGCLIENT
18 #ifndef KY_DISABLE_VISUALDEBUGCLIENT
36 class MessageAggregatedBlob;
37 class SocketDispatcherFactory;
38 class ClientStatusChangedCallback;
39 class AcknowledgeConnectionMessageReceiver;
41 class VisualDebugClientScopedFileWriter;
44 class MessagePortHandler;
55 class VisualDebugClient
74 static KyUInt32 GetInfiniteWaitDelay() {
return KY_WAIT_INFINITE; }
77 KyResult SetupReceiverRegistry(MessageReceiverRegistry& receiverRegistry, VisualDebugUnknownBlobTypeHandling unknownBlobTypeHandling = VisualDebugUnknownBlobTypeHandling::Log);
87 KyResult ConnectToServer(
const char* ipAddress,
KyUInt32 port, RunMode runMode = RunSynchronously);
90 void CloseConnection();
93 bool IsConnected()
const;
96 bool IsConnectionEstablished()
const;
99 bool IsReceptionPipelineEmpty()
100 {
return (m_socketThreadMgr ? m_socketThreadMgr->IsReceptionPipelineEmpty() :
true); }
108 KyResult Send(BaseBlobBuilder<T>& blobBuilder)
110 if (m_socketThreadMgr)
112 blobBuilder.m_heap = GetHeap();
113 Ptr<BaseBlobHandler> blobHandler = *KY_HEAP_NEW(blobBuilder.m_heap) BlobHandler<T>;
114 blobBuilder.Build((BlobHandler<T>&)*blobHandler);
115 return this->CreateMessageAndSend(blobHandler);
122 KyResult SendEndOfSynchronization();
135 bool WaitWhileEstablishingConnection(
KyUInt32 maxDelayMilliseconds);
139 void StartListeningForAvailableServers(
KyUInt32 port, RunMode runMode = RunAsynchronously);
140 void ListenForAvailableServers();
141 void GetAvailableServers(KyArray<Ptr<Net::AMP::MessagePort> >& availableServers);
142 void StopListeningForAvailableServers();
145 KyResult ReadFromFile(const
char* readFromFile,
Kaim::FileOpenerBase* fileOpener, RunMode runMode = RunSynchronously);
146 KyResult WriteToFile(const
char* writeToFile,
Kaim::FileOpenerBase* fileOpener, VisualDebugClientScopedFileWriter & writer, RunMode runMode = RunSynchronously);
149 void SetupMessageRegistryForServerPorts(Net::AMP::MessageTypeRegistry& customMsgTypeRegistry);
150 void SetupMessageRegistryForBlobs(Net::AMP::MessageTypeRegistry& customMsgTypeRegistry);
151 void CreateManager(SocketDispatchMode mode, Net::AMP::MessageTypeRegistry& customMsgTypeRegistry,
bool initSocketConnection);
152 void DestroyManager();
156 KyResult CreateMessageAndSend(Ptr<BaseBlobHandler> handlerPtr);
158 KyResult SendMessage(MessageBlob* msg);
160 Ptr<Net::AMP::Message> CreateAndReadMessage(File& stream);
162 void HandleAllReceivedMessages();
163 void Handle(Ptr<Net::AMP::Message> msg);
166 Net::AMP::ThreadMgr* GetThreadMgr() {
return m_socketThreadMgr.GetPtr(); }
167 const Net::AMP::ThreadMgr* GetThreadMgr()
const {
return m_socketThreadMgr.GetPtr(); }
168 MemoryHeap* GetHeap() {
return Memory::GetHeapByAddress(m_socketThreadMgr.GetPtr()); }
170 void WaitForEmptiedSendQueue();
172 RunMode GetRunMode()
const {
return m_runMode; }
174 File* GetFile() {
return m_file; }
177 static const KyUInt32 NotConnected = 0;
178 std::atomic<KyUInt32> m_wasConnected;
179 bool m_isSynchronized;
181 KyArray<char> m_receiveBuffer;
183 Kaim::Ptr<Net::AMP::ThreadMgr> m_socketThreadMgr;
184 Kaim::Ptr<Net::AMP::DiscardMessageHandler> m_msgDiscarder;
185 Kaim::Ptr<MessagePortHandler> m_receivedMsgPort;
186 Kaim::Ptr<MessageBlobHandler> m_msgBlobHandler;
187 Kaim::Ptr<MessageAggregatedBlobHandler> m_msgAggregatedBlobHandler;
188 Kaim::SocketDispatcherFactory* m_socketFactory;
189 Kaim::Ptr<File> m_file;
192 friend class ClientStatusChangedCallback;
193 Kaim::Ptr<ClientStatusChangedCallback> m_statusCallback;
194 Kaim::Event m_connectedEvent;
199 class VisualDebugClientScopedFileWriter
203 VisualDebugClientScopedFileWriter();
204 ~VisualDebugClientScopedFileWriter();
211 KyResult WriteMessageToFile(Net::AMP::Message*& message);
215 void Init(VisualDebugClient* visualDebugClient, VisualDebugClient::RunMode runMode);
218 VisualDebugClient* m_visualDebugClient;
219 VisualDebugClient::RunMode m_runMode;
220 MessageAggregatedBlob* m_aggregatedBlobMsg;
234 class VisualDebugClient
240 RunSynchronously = 0,
241 RunAsynchronously = 1
244 static KyUInt32 GetInfiniteWaitDelay() {
return KY_WAIT_INFINITE; }
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KY_ERROR
use result == KY_ERROR to test for error
Definition: types.h:132