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

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

' (in) filename: желаемое имя для входного файла IR

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

Public Sub New(ByVal filename As String, ByVal irdaServiceName As String)

 'Имя сокета IrDA, который мы хотим открыть

 m_IrDAServiceName = irdaServiceName

 'Имя файла, в котором мы хотим сохранить полученные данные

 m_fileNameForDownload = filename

End Sub

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

'Обеспечивает асинхронный прием файла через IR

' (in) filename: имя файла, в который осуществляется запись

Перейти на страницу:

Похожие книги