Final move of Dustins network tables patches

Change-Id: I7d351d87e63c8174b62f4ec09f805f685c80019c
This commit is contained in:
Fredric Silberberg
2015-02-07 19:19:59 -05:00
parent 39158754d7
commit bfa4bbaf78
8 changed files with 91 additions and 72 deletions

View File

@@ -17,10 +17,10 @@ NetworkTableServer::NetworkTableServer(IOStreamProvider& _streamProvider, Networ
connectionList(&incomingStreamMonitor),
writeManager(connectionList, threadManager, GetEntryStore(), ULONG_MAX),
continuingReceiver(writeManager){
GetEntryStore().SetIncomingReceiver(&continuingReceiver);
GetEntryStore().SetOutgoingReceiver(&continuingReceiver);
incomingStreamMonitor.start();
writeManager.start();
}
@@ -35,6 +35,9 @@ NetworkTableServer::~NetworkTableServer(){
void NetworkTableServer::Close(){
try{
//Note: streamProvider must come before the incomingStreamMonitor so the that task can complete first for the thread to close
// [9/1/2013 Terminator]
streamProvider.close();
incomingStreamMonitor.stop();
writeManager.stop();
connectionList.closeAll();

View File

@@ -36,6 +36,9 @@ void ServerConnectionAdapter::badMessage(BadMessageException& e) {
gotoState(new ServerConnectionState_Error(e));
adapterListener.close(*this, true);
m_IsAdapterListenerClosed=true;
if (readThread) {
readThread->stop();
}
}
void ServerConnectionAdapter::ioException(IOException& e) {
@@ -46,6 +49,9 @@ void ServerConnectionAdapter::ioException(IOException& e) {
else
gotoState(new ServerConnectionState_Error(e));
adapterListener.close(*this, false);
if (readThread) {
readThread->stop();
}
m_IsAdapterListenerClosed=true;
}

View File

@@ -18,9 +18,9 @@ ServerNetworkTableEntryStore::~ServerNetworkTableEntryStore()
bool ServerNetworkTableEntryStore::addEntry(NetworkTableEntry* newEntry)
{
NTSynchronized sync(LOCK);
NTSynchronized sync(block_namedEntries);
NetworkTableEntry* entry = namedEntries[newEntry->name];
if (entry == NULL)
{
newEntry->SetId(nextId++);
@@ -44,13 +44,19 @@ bool ServerNetworkTableEntryStore::updateEntry(NetworkTableEntry* entry, Sequenc
*/
void ServerNetworkTableEntryStore::sendServerHello(NetworkTableConnection& connection)
{
NTSynchronized sync(LOCK);
std::map<std::string, NetworkTableEntry*>::iterator itr;
for (itr = namedEntries.begin(); itr != namedEntries.end(); itr++)
std::vector<NetworkTableEntry *> entry_list;
{
NetworkTableEntry* entry = itr->second;
connection.sendEntryAssignment(*entry);
NTSynchronized sync(block_namedEntries);
std::map<std::string, NetworkTableEntry*>::iterator itr;
for (itr = namedEntries.begin(); itr != namedEntries.end(); itr++)
{
NetworkTableEntry* entry = itr->second;
entry_list.push_back(entry);
}
}
for (size_t i=0;i<entry_list.size();i++)
connection.sendEntryAssignment(*(entry_list[i]));
connection.sendServerHelloComplete();
connection.flush();
}