Important Update:
- FunctionCore
- So not set Function JSON "config" param to empty object by default
- Change TChannelLink to reference Channel direct
- Add Input/Output to TChannelLink
- Replace LinkChannel() Bidirectional param with Input/Output param
- Update JSON config as well
- Implement Channel "Ready" state and events
- Remove Input/OutputEnabled parameters and related methods
- Remove from JSON config as well
- Update AddChannel() method accordingly
- Add Ref param to struct TChannel
- SelectableCore:
- Convert inline ChangeState() to non-inline method
- Move ChangeState() to last step in open/close methods
- Add Channels in Not Ready state
- Change Channel state when Handle state changed
- DeviceCore:
- Add Channels in Ready state
- FileCore:
- Add Channel in Not Ready state
This commit is contained in:
@@ -632,6 +632,7 @@ THandle * CSelectableCore::OpenUNIXserverSocket( THandle * Handle )
|
||||
// Set state
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
};
|
||||
@@ -646,6 +647,7 @@ THandle * CSelectableCore::OpenUNIXserverSocket( THandle * Handle )
|
||||
// Set state
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
};
|
||||
@@ -729,11 +731,10 @@ THandle * CSelectableCore::OpenUNIXclientSocket( THandle * Handle )
|
||||
|
||||
// Close socket
|
||||
close( Handle->FD );
|
||||
ChangeState( Handle, csFailed );
|
||||
Handle->FD = -1;
|
||||
Handle->AddressFailed = true;
|
||||
|
||||
// Reset Handle
|
||||
Handle->FD = -1;
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -978,11 +979,13 @@ THandle * CSelectableCore::OpenUDPserverSocket( THandle * Handle, bool DelayReso
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s/%s: Handle '%s' - Failed to bind UDP socket [%s:%s] (%s)",
|
||||
ProcessName, Name, Handle->Name, Handle->HostName, Handle->PortName, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
// Close handle
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
ChangeState( Handle, csFailed );
|
||||
Handle->AddressFailed = true;
|
||||
|
||||
// Change state
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
};
|
||||
|
||||
@@ -1173,11 +1176,12 @@ THandle * CSelectableCore::OpenTCPserverSocket( THandle * Handle, bool DelayReso
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s/%s: Handle '%s' - Failed to bind TCP Server socket [%s:%s] (%s)",
|
||||
ProcessName, Name, Handle->Name, Handle->HostName, Handle->PortName, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
// Close handle
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
ChangeState( Handle, csFailed );
|
||||
Handle->AddressFailed = true;
|
||||
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
};
|
||||
|
||||
@@ -1188,11 +1192,12 @@ THandle * CSelectableCore::OpenTCPserverSocket( THandle * Handle, bool DelayReso
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s/%s: Handle '%s' - Failed to listen on TCP Server socket [%s:%s] (%s)",
|
||||
ProcessName, Name, Handle->Name, Handle->HostName, Handle->PortName, strerror(errno) );
|
||||
|
||||
// Set state
|
||||
// Close handle
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
ChangeState( Handle, csFailed );
|
||||
Handle->AddressFailed = true;
|
||||
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
};
|
||||
|
||||
@@ -1362,9 +1367,10 @@ THandle * CSelectableCore::OpenTCPclientSocket( THandle * Handle, bool DelayReso
|
||||
if (Log) Log->Message( LogLevel, dlMedium, "%s/%s: Handle '%s' - Could not set KeepAlive options [%s:%s] (%s)",
|
||||
ProcessName, Name, Handle->Name, Handle->HostName, Handle->PortName, strerror(errno) );
|
||||
|
||||
// Set State
|
||||
// Close handle
|
||||
close( Handle->FD );
|
||||
Handle->FD = -1;
|
||||
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
}
|
||||
@@ -1413,11 +1419,10 @@ THandle * CSelectableCore::OpenTCPclientSocket( THandle * Handle, bool DelayReso
|
||||
|
||||
// Close socket
|
||||
close( Handle->FD );
|
||||
ChangeState( Handle, csFailed );
|
||||
Handle->FD = -1;
|
||||
Handle->AddressFailed = true;
|
||||
|
||||
// Reset Handle
|
||||
Handle->FD = -1;
|
||||
ChangeState( Handle, csFailed );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -1515,7 +1520,16 @@ bool CSelectableCore::Close( THandle * Handle, bool QuickReopen )
|
||||
} else {
|
||||
Fail = (close( Handle->FD ))? true : false;
|
||||
}
|
||||
ChangeState( Handle, ((Fail)? csFailed : csClosed) );
|
||||
|
||||
// Remove from Select List
|
||||
if (!Fail && Selector) {
|
||||
if (Handle->Type != ctUDPremote) {
|
||||
Selector->Remove( Handle->FD, true, true );
|
||||
}
|
||||
}
|
||||
|
||||
// Reset FD
|
||||
Handle->FD = ((Fail)? Handle->FD : -1);
|
||||
|
||||
// Start timer (for re-open)
|
||||
if (QuickReopen)
|
||||
@@ -1599,15 +1613,8 @@ bool CSelectableCore::Close( THandle * Handle, bool QuickReopen )
|
||||
break;
|
||||
};
|
||||
|
||||
// Remove from Select List
|
||||
if (!Fail && Selector) {
|
||||
if (Handle->Type != ctUDPremote) {
|
||||
Selector->Remove( Handle->FD, true, true );
|
||||
}
|
||||
}
|
||||
|
||||
// Reset FD
|
||||
Handle->FD = ((Fail)? Handle->FD : -1);
|
||||
// Change State
|
||||
ChangeState( Handle, ((Fail)? csFailed : csClosed) );
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user