Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 600

>  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)

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