public static void Shutdown()
{
if (DFSShutdownEvent!=null)
DFSShutdownEvent.Set();
RemoveAllItemsFromLocalOnly();
//Remove all packethandlers
NetworkComms.RemoveGlobalIncomingPacketHandler<ItemAssemblyConfig>("DFS_IncomingLocalItemBuild", IncomingLocalItemBuild);
NetworkComms.RemoveGlobalIncomingPacketHandler<string[]>("DFS_RequestLocalItemBuild", RequestLocalItemBuilds);
NetworkComms.RemoveGlobalIncomingPacketHandler<ChunkAvailabilityRequest>("DFS_ChunkAvailabilityInterestRequest", IncomingChunkInterestRequest);
NetworkComms.RemoveGlobalIncomingPacketHandler<byte[]>("DFS_ChunkAvailabilityInterestReplyData", IncomingChunkInterestReplyData);
NetworkComms.RemoveGlobalIncomingPacketHandler<ChunkAvailabilityReply>("DFS_ChunkAvailabilityInterestReplyInfo", IncomingChunkInterestReplyInfo);
NetworkComms.RemoveGlobalIncomingPacketHandler<string>("DFS_ChunkAvailabilityRequest", IncomingChunkAvailabilityRequest);
NetworkComms.RemoveGlobalIncomingPacketHandler<PeerChunkAvailabilityUpdate>("DFS_PeerChunkAvailabilityUpdate", IncomingPeerChunkAvailabilityUpdate);
NetworkComms.RemoveGlobalIncomingPacketHandler<ItemRemovalUpdate>("DFS_ItemRemovalUpdate", IncomingItemRemovalUpdate);
NetworkComms.RemoveGlobalIncomingPacketHandler<KnownPeerEndPoints>("DFS_KnownPeersUpdate", KnownPeersUpdate);
NetworkComms.RemoveGlobalIncomingPacketHandler<string>("DFS_KnownPeersRequest", KnownPeersRequest);
NetworkComms.RemoveGlobalIncomingPacketHandler<DFSLinkRequest>("DFS_ItemLinkRequest", IncomingRemoteItemLinkRequest);
NetworkComms.RemoveGlobalConnectionCloseHandler(DFSConnectionShutdown);
DFSInitialised = false;
lock (globalDFSLocker)
{
//Cleanup the disk DFS item directory if necessary.
if (Directory.Exists("DFS_" + NetworkComms.NetworkIdentifier))
Directory.Delete("DFS_" + NetworkComms.NetworkIdentifier, true);
}
if (elapsedTimerThread != null && !elapsedTimerThread.Join(2000))
{
try
{
LogTools.LogException(new Exception("DFS elapsedTimerThread did not close after 2 seconds."), "DFSShutdownError");
elapsedTimerThread.Abort();
}
catch (Exception) { }
}
if (loggingEnabled) DFS._DFSLogger.Debug("DFS Shutdown.");
}