Читать «Программирование мобильных устройств на платформе .NET Compact Framework» онлайн - страница 568

Иво Салмре

   setStatus(SendStatus.Finished Successfully)

   Return

  End If

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

  If (m_wasSenderStopped = True) Then

   m_descriptionOfLastSendAttempt = "User Aborted."

   setStatus(SendStatus.Finished_Aborted)

   Return

  End If

  'В противном случае... Нам пока не удалось обнаружить сервер IrDA,

  'имя которого совпадает с именем службы. Мы продолжим выполнение цикла

  'и попытаемся найти сервер.

 End While

 'Мы никогда не попадем в это место программы при выполнении

End Sub

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

'Попытаться передать поток ввода-вывода (например, файл) посредством IR

'[возвращаемое значение]:

' true: успешная передача файла

' false: файл не был успешно передан

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

Private Function sendStream(ByRef errorDescription As String, _

 ByRef streamOutToIrDA As System.IO.Stream, _

 ByRef irDASender As System.Net.Sockets.IrDAClient, _

 ByRef streamInFromFile As System.IO.Stream) As Boolean

 errorDescription = ""

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

 'Создание нового клиента IRDA

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

 Try

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

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

  'и возвращен, если прослушивающие клиенты отсутствуют.

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

  irDASender = _

   New System.Net.Sockets.IrDAClient(m_IrDAServiceName)

  Catch eCreateClient As System.Exception

   'В данном случае могли возникнуть несколько ситуаций:

   '#1: отсутствуют прослушивающие устройства

   '#2: прослушивающее устройство существует, но не реагирует

   ' (может отказаться от разговора)

   errorDescription = eCreateClient.Message

   Return False

  End Try

  'В данном случае могли возникнуть несколько ситуаций:

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

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

  If (m_wasSenderStopped = True) Then

   irDASender.Close()

   irDASender = Nothing

   Return False

  End If

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

 'ПЕРЕДАТЬ ДАННЫЕ!

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

 'Открыть файл, который мы хотим передать

 streamInFromFile = System.IO.File.OpenRead(m_fileToSend)

 'Открыть сокет IrDA, которому мы хотим передать данные

 streamOutToIrDA = irDASender.GetStream()

 Const BUFFER_SIZE As Integer = 1024

 Dim inBuffer() As Byte

 ReDim inBuffer(BUFFER_SIZE)

 Dim bytesRead As Integer

 Dim iTestAll As Integer

 Dim iTestWrite As Integer

 ' Цикл...

 Do

  'Считать байты из файла

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

  iTestAll = iTestAll + 1

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

  If (bytesRead > 0) Then

   streamOutToIrDA.Write(inBuffer, 0, bytesRead)

   iTestWrite = iTestWrite + 1

  End If

 Loop While (bytesRead > 0)

 'Сбросить выходной поток

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

 streamOutToIrDA.Close() 'Закрыть поток

 streamOutToIrDA = Nothing

 'Освободить локальный файл

 streamInFromFile.Close()

 streamOutToIrDA = Nothing