Fixed multithreading and therefore close() and open() functionality. closes #3. Added ability to close() but keep listeners.
This commit is contained in:
		
							parent
							
								
									606230d1b6
								
							
						
					
					
						commit
						11e62b8425
					
				@ -49,15 +49,15 @@ std::thread* oscThread;
 | 
				
			|||||||
*  UdpListeningReceiveSocket runs in a blocking loop. [RunUntilSigInt()]*/
 | 
					*  UdpListeningReceiveSocket runs in a blocking loop. [RunUntilSigInt()]*/
 | 
				
			||||||
void runOscThread(unsigned int port)
 | 
					void runOscThread(unsigned int port)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    thePacketListener = new ThePacketListener;
 | 
					    if (!thePacketListener)
 | 
				
			||||||
 | 
					        thePacketListener = new ThePacketListener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (sock) sock->~UdpListeningReceiveSocket();
 | 
				
			||||||
    sock = new UdpListeningReceiveSocket(
 | 
					    sock = new UdpListeningReceiveSocket(
 | 
				
			||||||
        IpEndpointName(IpEndpointName::ANY_ADDRESS, port),
 | 
					        IpEndpointName(IpEndpointName::ANY_ADDRESS, port),
 | 
				
			||||||
        thePacketListener);
 | 
					        thePacketListener);
 | 
				
			||||||
    sock->RunUntilSigInt(); //<<--- this is the loop
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Cleanup after sock exited the loop
 | 
					    sock->RunUntilSigInt(); //<<--- this is the loop
 | 
				
			||||||
    sock = NULL;
 | 
					 | 
				
			||||||
    thePacketListener = NULL;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* DLL was loaded */
 | 
					/* DLL was loaded */
 | 
				
			||||||
@ -69,9 +69,11 @@ BOOL APIENTRY DllMain( HMODULE hModule,
 | 
				
			|||||||
    switch (ul_reason_for_call)
 | 
					    switch (ul_reason_for_call)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case DLL_PROCESS_ATTACH:
 | 
					    case DLL_PROCESS_ATTACH:
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    case DLL_THREAD_ATTACH:
 | 
					    case DLL_THREAD_ATTACH:
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case DLL_THREAD_DETACH:
 | 
					    case DLL_THREAD_DETACH:
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    case DLL_PROCESS_DETACH:
 | 
					    case DLL_PROCESS_DETACH:
 | 
				
			||||||
        close();
 | 
					        close();
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -97,15 +99,16 @@ DLLEXPORT int open(HWND targetWindowHandle, unsigned int port)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DLLEXPORT int close()
 | 
					DLLEXPORT int close(unsigned int clearListeners)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (sock && sock->IsBound()) 
 | 
					    if (sock) 
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        sock->AsynchronousBreak();
 | 
					        sock->AsynchronousBreak();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    oscThread->join();
 | 
				
			||||||
    oscThread = NULL;
 | 
					    oscThread = NULL;
 | 
				
			||||||
    hwnd = NULL;
 | 
					    hwnd = NULL;
 | 
				
			||||||
    listeners.clear();
 | 
					    if (clearListeners) listeners.clear();
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,7 +171,10 @@ DLLEXPORT int handleOscMsg(const osc::ReceivedMessage& m)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (!hwnd || !sock->IsBound())
 | 
					    if (!hwnd || !sock->IsBound())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        OutputDebugString(L"handleOscMsg: Seems open() was not called yet...\r\n");
 | 
					        OutputDebugString(L"handleOscMsg: Seems open() was not called yet...");
 | 
				
			||||||
 | 
					        if (!hwnd) OutputDebugString(L" (hwnd)");
 | 
				
			||||||
 | 
					        if (!sock->IsBound()) OutputDebugString(L" (sock)");
 | 
				
			||||||
 | 
					        OutputDebugString(L"\r\n");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@
 | 
				
			|||||||
#define OSC_TYPE_ALL		UINT_MAX
 | 
					#define OSC_TYPE_ALL		UINT_MAX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern "C" DLLEXPORT int open(HWND targetWindowHandle, unsigned int port);
 | 
					extern "C" DLLEXPORT int open(HWND targetWindowHandle, unsigned int port);
 | 
				
			||||||
extern "C" DLLEXPORT int close();
 | 
					extern "C" DLLEXPORT int close(unsigned int clearListeners = 1);
 | 
				
			||||||
extern "C" DLLEXPORT int addListener(LPCSTR address, unsigned int messageID, unsigned int dataType = OSC_TYPE_ALL);
 | 
					extern "C" DLLEXPORT int addListener(LPCSTR address, unsigned int messageID, unsigned int dataType = OSC_TYPE_ALL);
 | 
				
			||||||
extern "C" DLLEXPORT int removeListener(LPCSTR address);
 | 
					extern "C" DLLEXPORT int removeListener(LPCSTR address);
 | 
				
			||||||
extern "C" DLLEXPORT int handleOscMsg(const osc::ReceivedMessage & m);
 | 
					extern "C" DLLEXPORT int handleOscMsg(const osc::ReceivedMessage & m);
 | 
				
			||||||
 | 
				
			|||||||
@ -99,4 +99,10 @@ do_exit:
 | 
				
			|||||||
    ExitApp
 | 
					    ExitApp
 | 
				
			||||||
    return
 | 
					    return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Esc::GoSub, do_exit
 | 
					Esc::
 | 
				
			||||||
 | 
					ExitApp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					^a::
 | 
				
			||||||
 | 
					DllCall("OSC2AHK.dll\close", UInt, 0)
 | 
				
			||||||
 | 
					;msgbox,esc
 | 
				
			||||||
 | 
					DllCall("OSC2AHK.dll\open", UInt, hWnd, UInt, 7001)
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user