private void launchAndKillKinects()
{
for (int i = 0; i < availableKinects.Count; i++)
{
if (availableKinects[i].UseKinect)
{
//If the Kinect is to be used, check and see if it exists, and launch it if it doesn't
bool kinectFound = false;
for (int j = 0; j < server.kinects.Count; j++)
{
if (server.kinects[j].uniqueKinectID == availableKinects[i].UniqueID)
{
server.kinects[j].kinectID = (int)availableKinects[i].KinectID;
kinectFound = true;
break;
}
}
if (!kinectFound)
{
availableKinects[i].ServerStatus = "Starting";
kinectsAvailableDataGrid.Items.Refresh();
kinectsAvailableDataGrid.InvalidateVisual();
System.Threading.Thread.Sleep(10); //Yes, it is a dirty hack, but it is the only way I can find to get the GUI to update reliably
ForceGUIUpdate();
if (availableKinects[i].kinectType == KinectVersion.KinectV1)
{
server.kinects.Add(new KinectV1Wrapper.Core(ref server.serverMasterOptions, true, availableKinects[i].KinectID));
}
else if (availableKinects[i].kinectType == KinectVersion.KinectV2)
{
server.kinects.Add(new KinectV2Wrapper.Core(ref server.serverMasterOptions, true, (int)availableKinects[i].KinectID));
}
else if (availableKinects[i].kinectType == KinectVersion.NetworkKinect)
{
//TODO: Launch the networked kinect server here (unless I have a VRPN limitation I need to work around)
server.kinects.Add(new NetworkKinectWrapper.Core(ref server.serverMasterOptions, true, (int)availableKinects[i].KinectID, availableKinects[i].UniqueID));
}
availableKinects[i].ServerStatus = "Running";
}
}
else
{
//If the Kinect is not to be used, check and see if it exists, and destroy it if it does
for (int j = 0; j < server.kinects.Count; j++)
{
if (server.kinects[j].uniqueKinectID == availableKinects[i].UniqueID)
{
lock (server.kinects[j])
{
availableKinects[i].ServerStatus = "Stopping";
kinectsAvailableDataGrid.Items.Refresh();
kinectsAvailableDataGrid.UpdateLayout();
System.Threading.Thread.Sleep(10);
ForceGUIUpdate();
server.kinects[j].ShutdownSensor(); //TODO: This fails sometimes... There seems to be a race condition and the obect is getting removed between the if statement and the shutdown call
server.kinects.RemoveAt(j);
availableKinects[i].ServerStatus = "Stopped";
break;
}
}
}
}
}
server.kinects.Sort(new KinectCoreComparer());
}