Литмир - Электронная Библиотека
Содержание  
A
A

 'Открыть прослушивающее устройство

 '---------------------------------

 Try

  m_wasListenerStopped = False

  m_irListener = _

   New System.Net.Sockets.IrDAListener(m_IrDAServiceName)

  m_irListener.Start()

 Catch eListener As System.Exception

  m_errorDuringTransfer = "Error creating listener - " + _

   eListener.Message

  GoTo exit_sub_with_error

 End Try

 'Проверить, не поступила ли команда отменить выполнение

 If (m_wasListenerStopped = True) Then

  GoTo exit_sub_with_abort

 End If

 '------------------

 'Принять соединение

 '------------------

 Try

  '--------------------------------------------------------------------

  'Выполнение будет приостановлено здесь до тех пор, пока устройство не

  'начнет передавать информацию, или не будет остановлен объект

  'прослушивания, выполняющийся в другом потоке)

  '--------------------------------------------------------------------

  irdaClient = m_irListener.AcceptIrDAClient()

 Catch eClientAccept As System.Exception

  'Если прослушивание остановлено другим потоком, инициировавшим отмену

  'выполнения, будет сгенерировано исключение и управление будет

  'передано сюда.

  If (m_wasListenerStopped = True) Then

   GoTo exit_sub_with_abort

  End If

  'Если прослушивание не было прекращено,

  'то произошло иное исключение. Обработать его.

  m_errorDuringTransfer = "Error accepting connection - " + _

   eClientAccept.Message

  GoTo exit_sub_with_error

 End Try

 'В этом месте возможны два состояния:

 '#1: Мы получили соединение от передающего устройства IR

 '#2: IR-запрос был отменен (кто-то вызвал функцию STOP)

 ' (в этом случае приведенный ниже код сгенерирует исключение)

 'Проверить, не было ли отменено выполнение

 If (m_wasListenerStopped = True) Then

  GoTo exit_sub_with_abort

 End If

 '==========================================

 'ОБНОВЛЕНИЕ СОСТОЯНИЯ

 '==========================================

 setStatus(ReceiveStatus.NotDone_Receiving)

 '-------------------------

 'Открыть принимающий поток

 '-------------------------

 Try

  irStreamIn = irdaClient.GetStream()

 Catch exGetInputStream As System.Exception

  m_errorDuringTransfer = "Error getting input stream - " + _

   exGetInputStream.Message

  GoTo exit_sub_with_error

 End Try

 'Приготовиться к получению данных!

 Const BUFFER_SIZE As Integer = 1024

 Dim inBuffer() As Byte

 ReDim inBuffer(BUFFER_SIZE)

 Dim bytesRead As Integer

 Do

  'Считать байты из порта IR

  bytesRead = irStreamIn.Read(inBuffer, 0, BUFFER_SIZE)

  'Записать байты в наш выходной поток

  If (bytesRead > 0) Then

   outputStream.Write(inBuffer, 0, bytesRead)

  End If

 Loop While (bytesRead > 0)

 outputStream.Flush() 'Закончить запись любых выходных данных

 '==========================================

 'ОБНОВЛЕНИЕ СОСТОЯНИЯ: УСПЕШНО ВЫПОЛНЕНО

 '==========================================

 setStatus(ReceiveStatus.Done_Success)

 Return 'No errors

 '==========================================

 'ОШИБКА.

 '==========================================

exit_sub_with_abort:

 'ОБНОВЛЕНИЕ СОСТОЯНИЯ: Отменено (но не из-за ошибки)

 setStatus(ReceiveStatus.Done_Aborted)

 Return

exit_sub_with_error:

 'ОБНОВЛЕНИЕ СОСТОЯНИЯ: ОШИБКА!!!!

 setStatus(ReceiveStatus.Done_ErrorOccured)

 End Sub

End Class

Листинг 15.6. Простая Web-служба
277
{"b":"947732","o":1}