//Принимает данные с камеры и запускает обработку public void AcceptData(object socket) { lock (_inhurtLocker) { _inhurtHandled++; } try { var acceptSocket = (Socket)socket; //Принимаем номер камеры var cameraNumberByte = new byte[4]; acceptSocket.Receive(cameraNumberByte); var cameraNumber = BitConverter.ToInt32(cameraNumberByte, 0); //Принимаем номер автомобиля var autoNumByte = new byte[4]; acceptSocket.Receive(autoNumByte); var autoNum = BitConverter.ToInt32(autoNumByte, 0); //Принимаем скорость нарушителя var speedByte = new byte[4]; acceptSocket.Receive(speedByte); var speed = BitConverter.ToInt32(speedByte, 0); //Принимаем размер фотографии и саму фотографию var photoLengthByte = new byte[4]; acceptSocket.Receive(photoLengthByte); var photolenght = BitConverter.ToInt32(photoLengthByte, 0); var photo = new byte[photolenght]; var offset = 0; while (offset < photolenght) { var bufferSizeByte = new byte[4]; acceptSocket.Receive(bufferSizeByte); var bufferSize = BitConverter.ToInt32(bufferSizeByte, 0); var buffer = new byte[bufferSize]; acceptSocket.Receive(buffer); Array.Copy(buffer, 0, photo, offset, buffer.Length); offset += bufferSize; } string name = GetNameByAutoNumber(autoNum); //Вывод в richtextbox WriteToLog.Invoke(this, "Камера" + cameraNumber + "передала данные. Номер: " + autoNum + ", скорость: " + speed); //Отключаем камеру, если необходимо var isEnable = true; if (_stoped) { isEnable = false; _states[cameraNumber] = false; } var isEnableByte = BitConverter.GetBytes(isEnable); acceptSocket.Send(isEnableByte); //Запускаем обработку данных; StartDataHandle(autoNum, photo, speed, cameraNumber); } catch (Exception ex) { WriteToLog(this, ex.Message + Environment.NewLine); } }
/// <summary> /// Вызвать метод записи в журнал /// </summary> public void ExecWriteToLog(string text) { WriteToLog?.Invoke(text); }