mirror of
https://github.com/autc04/Retro68.git
synced 2025-02-20 02:29:11 +00:00
LaunchAPPLServer: use separate OT endpoints for connection
This commit is contained in:
parent
f1f9cf9099
commit
1fc19efaeb
@ -21,8 +21,8 @@ OpenTptStream::OpenTptStream()
|
|||||||
OSStatus err;
|
OSStatus err;
|
||||||
|
|
||||||
|
|
||||||
//endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
|
listenerEndpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
|
||||||
endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
|
endpoint = nullptr;
|
||||||
|
|
||||||
InetAddress addr, retAddr;
|
InetAddress addr, retAddr;
|
||||||
OTInitInetAddress(&addr, 1984, 0);
|
OTInitInetAddress(&addr, 1984, 0);
|
||||||
@ -36,10 +36,10 @@ OpenTptStream::OpenTptStream()
|
|||||||
ret.addr.buf = (UInt8*) &retAddr;
|
ret.addr.buf = (UInt8*) &retAddr;
|
||||||
|
|
||||||
|
|
||||||
endpoint->Bind(&req, &ret);
|
listenerEndpoint->Bind(&req, &ret);
|
||||||
|
|
||||||
|
listenerEndpoint->SetSynchronous();
|
||||||
|
|
||||||
endpoint->SetSynchronous();
|
|
||||||
endpoint->SetNonBlocking();
|
|
||||||
tryListening();
|
tryListening();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +56,8 @@ void OpenTptStream::tryListening()
|
|||||||
|
|
||||||
OSStatus err;
|
OSStatus err;
|
||||||
|
|
||||||
err = endpoint->Listen(&call);
|
listenerEndpoint->SetNonBlocking();
|
||||||
|
err = listenerEndpoint->Listen(&call);
|
||||||
#ifdef DEBUG_CONSOLE
|
#ifdef DEBUG_CONSOLE
|
||||||
printf("Listen: err = %d.\n", (int)err);
|
printf("Listen: err = %d.\n", (int)err);
|
||||||
#endif
|
#endif
|
||||||
@ -64,9 +65,15 @@ void OpenTptStream::tryListening()
|
|||||||
if(err < 0)
|
if(err < 0)
|
||||||
return; // hopefully, kOTNoData
|
return; // hopefully, kOTNoData
|
||||||
|
|
||||||
endpoint->SetBlocking();
|
if(!endpoint)
|
||||||
|
{
|
||||||
|
endpoint = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, nullptr, &err);
|
||||||
|
endpoint->SetSynchronous();
|
||||||
|
}
|
||||||
|
|
||||||
err = endpoint->Accept(endpoint, &call);
|
listenerEndpoint->SetBlocking();
|
||||||
|
|
||||||
|
err = listenerEndpoint->Accept(endpoint, &call);
|
||||||
#ifdef DEBUG_CONSOLE
|
#ifdef DEBUG_CONSOLE
|
||||||
printf("Accept: err = %d.\n", (int)err);
|
printf("Accept: err = %d.\n", (int)err);
|
||||||
#endif
|
#endif
|
||||||
@ -79,12 +86,17 @@ void OpenTptStream::tryListening()
|
|||||||
|
|
||||||
OpenTptStream::~OpenTptStream()
|
OpenTptStream::~OpenTptStream()
|
||||||
{
|
{
|
||||||
endpoint->SetSynchronous();
|
if(endpoint)
|
||||||
|
{
|
||||||
endpoint->SetNonBlocking();
|
endpoint->SetNonBlocking();
|
||||||
if(connected)
|
if(connected)
|
||||||
endpoint->SndDisconnect(&call);
|
endpoint->SndDisconnect(&call);
|
||||||
endpoint->Unbind();
|
endpoint->Unbind();
|
||||||
OTCloseProvider(endpoint);
|
OTCloseProvider(endpoint);
|
||||||
|
}
|
||||||
|
listenerEndpoint->SetNonBlocking();
|
||||||
|
listenerEndpoint->Unbind();
|
||||||
|
OTCloseProvider(listenerEndpoint);
|
||||||
CloseOpenTransport();
|
CloseOpenTransport();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,6 +124,8 @@ void OpenTptStream::tryReading()
|
|||||||
void OpenTptStream::idle()
|
void OpenTptStream::idle()
|
||||||
{
|
{
|
||||||
OSStatus err;
|
OSStatus err;
|
||||||
|
if(connected)
|
||||||
|
{
|
||||||
switch(endpoint->Look())
|
switch(endpoint->Look())
|
||||||
{
|
{
|
||||||
case T_DISCONNECT:
|
case T_DISCONNECT:
|
||||||
@ -126,11 +140,18 @@ void OpenTptStream::idle()
|
|||||||
connected = false;
|
connected = false;
|
||||||
tryListening();
|
tryListening();
|
||||||
break;
|
break;
|
||||||
case T_LISTEN:
|
|
||||||
tryListening();
|
|
||||||
break;
|
|
||||||
case T_DATA:
|
case T_DATA:
|
||||||
tryReading();
|
tryReading();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch(listenerEndpoint->Look())
|
||||||
|
{
|
||||||
|
case T_LISTEN:
|
||||||
|
tryListening();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ class OpenTptStream : public Stream
|
|||||||
|
|
||||||
bool connected = false;
|
bool connected = false;
|
||||||
|
|
||||||
|
TEndpoint *listenerEndpoint;
|
||||||
TEndpoint *endpoint;
|
TEndpoint *endpoint;
|
||||||
TCall call;
|
TCall call;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user