diff --git a/LiveScanServer/KinectServer.cs b/LiveScanServer/KinectServer.cs index eb30e02..6454822 100644 --- a/LiveScanServer/KinectServer.cs +++ b/LiveScanServer/KinectServer.cs @@ -232,11 +232,12 @@ namespace KinectServer } } - public void GetStoredFrame(List> lFramesRGB, List> lFramesVerts) + public bool GetStoredFrame(List> lFramesRGB, List> lFramesVerts) { + bool bNoMoreStoredFrames; lFramesRGB.Clear(); lFramesVerts.Clear(); - + lock (oFrameRequestLock) { //Request frames @@ -248,10 +249,10 @@ namespace KinectServer //Wait till frames received bool allGathered = false; + bNoMoreStoredFrames = false; while (!allGathered) { - allGathered = true; - + allGathered = true; lock (oClientSocketLock) { for (int i = 0; i < lClientSockets.Count; i++) @@ -261,6 +262,9 @@ namespace KinectServer allGathered = false; break; } + + if (lClientSockets[i].bNoMoreStoredFrames) + bNoMoreStoredFrames = true; } } } @@ -275,6 +279,11 @@ namespace KinectServer } } } + + if (bNoMoreStoredFrames) + return false; + else + return true; } public void GetLatestFrame(List> lFramesRGB, List> lFramesVerts, List> lFramesBody) diff --git a/LiveScanServer/KinectSocket.cs b/LiveScanServer/KinectSocket.cs index 9d264a7..24bd3dd 100644 --- a/LiveScanServer/KinectSocket.cs +++ b/LiveScanServer/KinectSocket.cs @@ -31,6 +31,7 @@ namespace KinectServer public bool bFrameCaptured = false; public bool bLatestFrameReceived = false; public bool bStoredFrameReceived = false; + public bool bNoMoreStoredFrames = true; public bool bCalibrated = false; //The pose of the sensor in the scene (used by the OpenGLWindow to show the sensor) public AffineTransform oCameraPose = new AffineTransform(); @@ -85,6 +86,7 @@ namespace KinectServer { byteToSend[0] = 3; SendByte(); + bNoMoreStoredFrames = false; bStoredFrameReceived = false; } @@ -170,8 +172,11 @@ namespace KinectServer nToRead = BitConverter.ToInt32(buffer, 0); - if (nToRead == 0) + if (nToRead == -1) + { + bNoMoreStoredFrames = true; return; + } buffer = new byte[nToRead]; int nAlreadyRead = 0; diff --git a/LiveScanServer/MainWindowForm.cs b/LiveScanServer/MainWindowForm.cs index 391ce32..cfd016d 100644 --- a/LiveScanServer/MainWindowForm.cs +++ b/LiveScanServer/MainWindowForm.cs @@ -191,7 +191,11 @@ namespace KinectServer List> lFrameRGBAllDevices = new List>(); List> lFrameVertsAllDevices = new List>(); - oServer.GetStoredFrame(lFrameRGBAllDevices, lFrameVertsAllDevices); + bool success = oServer.GetStoredFrame(lFrameRGBAllDevices, lFrameVertsAllDevices); + + //This indicates that there are no more stored frames. + if (!success) + break; nFrames++; int nVerticesTotal = 0; @@ -200,10 +204,6 @@ namespace KinectServer nVerticesTotal += lFrameVertsAllDevices[i].Count; } - //This indicates that there are no more stored frames. - if (nVerticesTotal == 0) - break; - List lFrameRGB = new List(); List lFrameVerts = new List(); diff --git a/src/LiveScanClient/liveScanClient.cpp b/src/LiveScanClient/liveScanClient.cpp index 7dd4e46..5d408f2 100644 --- a/src/LiveScanClient/liveScanClient.cpp +++ b/src/LiveScanClient/liveScanClient.cpp @@ -519,7 +519,7 @@ void LiveScanClient::HandleSocket() } else { - int size = 0; + int size = -1; m_pClientSocket->SendBytes((char*)&size, 4); } }