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

   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

 'Освободить порт IrDA

 irDASender.Close()

 irDASender = Nothing

 'Успешное завершение!!!

 Return True

End Function

End Class

Листинг 15.5. Класс IrDAFileReceive

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

'Обеспечивает прием файла через IrDA (инфракрасный порт)

'Этот класс НЕ является реентерабельным и не должен вызываться более

'чем одной функцией за один раз. Если необходимо иметь несколько

'сеансов связи через IR, это необходимо делать путем создания

'нескольких различных экземпляров данного класса.

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

Public Class IrDAFileReceive

Private m_wasListenerStopped As Boolean

Private m_IrDAServiceName As String

Private m_fileNameForDownload As String

Private m_errorDurmgTransfer As String

Private m_irListener As System.Net.Sockets.IrDAListener

Private m ReceiveStatus As ReceiveStatus

Public ReadOnly Property ErrorText() As String

 Get

  Return m_errorDuringTransfer

 End Get

End Property

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

'Различные состояния приема

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

Public Enum ReceiveStatus

 NotDone_SettingUp

 NotDone_WaitingForSender

 NotDone_Receiving

 Done_Success

 Done_Aborted

 Done_ErrorOccured

End Enum

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

' Возвращает состояние передачи

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

Public ReadOnly Property Status() As ReceiveStatus

 Get

  SyncLock (Me)

   Return m_ReceiveStatus

  End SyncLock

 End Get

End Property

Private Sub setStatus(ByVal newStatus As ReceiveStatus)

 'Обеспечить многопоточную безопасность для предотвращения

 'параллельного выполнения операций чтения/записи

 SyncLock (Me)

  m_ReceiveStatus = newStatus

 End SyncLock 'end lock

End Sub

275
{"b":"947732","o":1}