Чтение онлайн

ЖАНРЫ

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

Салмре Иво

Шрифт:

#If DEBUG_SIMULATE_FAILURES <> 0 Then

 'Если это сбой, который мы хотим тестировать, генерировать исключение

 If (g_failureCode = _

SimulatedFailures.failInNextWriteSocketCode) Then

'Сбросить этот сбой, чтобы он не возник

'при следующем вызове этой функции

g_failureCode = SimulatedFailures.noFailurePending

Throw New Exception("Test communications failure: " + _

g_failureCode.ToString)

 End If

#End If

 'Передать
данные обычным образом.

 mySocket.Send(dataToSend)

End Sub

Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA

'Имя, которое мы хотим присвоить сокету IrDA

Const myIrDASocketName As String = "IrDaTestFileTransmit"

Private Sub buttonTestFileSend_Click(ByVal sender As Object, _

 ByVal e As System.EventArgs) Handles buttonTestFileSend.Click

 'Создать простой текстовый файл, который мы хотим передать

 Const fileName As String = "\myTestSendFile.txt"

 Dim textFileStream As System.IO.StreamWriter

 textFileStream = System.IO.File.CreateText(fileName)

 textFileStream.WriteLine("Today...")

 textFileStream.WriteLine("is а nice day")

 textFileStream.WriteLine("to go swim")

 textFileStream.WriteLine("in the lake")

 textFileStream.Close

 Dim irdaFileSender As IrDAFileSend

 irdaFileSender = New IrDAFileSend(fileName, myIrDASocketName)

 'Имеется 2 режима: 1 - Sync (синхронный), 2 — Async (асинхронный)

 '1. Вызвать функцию в синхронном режиме

 'и блокировать поток выполнения до тех пор,

 'пока файл не будет передан

 '1a. Информировать пользователя о том, что мы пытаемся передать данные

 Me.Text = "Trying to send..."

 'Подождать, пока клиент не будет найден, а затем передать файл

 irdaFileSender.LoopAndAttemptIRSend

 '1c. Информировать пользователя о том, что файл передан

 MsgBox("File sent!")

 Me.Text = "IrDA: Sent!"

 '2. Вызвать функцию в асинхронном режиме и поручить

 'передачу файла фоновому потоку

 'irdaFileSend.LoopAndAttemptIRSendAsync

 'ПРИМЕЧАНИЕ: Если мы вызываем функцию в асинхронном режиме, то
должны

 'периодически проверять, не завершила ли она выполнение, путем

 'вызова метода 'irdaFileSend.Status'

End Sub

Private Sub buttonTestFileReceive_Click(ByVal sender As Object, _

 ByVal e As EventArgs) Handles buttonTestFileReceive.Click

 'Если файл назначения уже существует, уничтожить его

 Const fileName As String = "\myTestReceiveFile.txt"

 If (System.IO.File.Exists(fileName)) Then

System.IO.File.Delete(fileName)

 End If

 Dim irdaFileReceiver As IrDAFileReceive

 irdaFileReceiver = New IrDAFileReceive(fileName, _

myIrDASocketName)

 'Имеется 2 режима: 1 — Sync (синхронный), 2 - Async (асинхронный)

 '1. Вызвать функцию в синхронном режиме

 ' блокировать поток выполнения до тех пор, пока

 'файл не будет получен

 '1a. Информировать пользователя о том, что мы ожидаем получения файла

 Me.Text = "Waiting to receive..."

 '1b. Ожидать, пока не будет сделана попытка установления с нами связи

 'и передачи файла

 irdaFileReceiver.WaitForIRFileDownload

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

 Me.Text = "IrDA: received!"

 MsgBox("File received!")

 '2. Вызвать функцию в асинхронном режиме и поручить

 'получение файла фоновому потоку

 'irdaFileReceive.WaitForIRFileDownloadAsync

 'ПРИМЕЧАНИЕ: Если мы вызываем функцию в асинхронном режиме, то должны

 'периодически проверять, не завершила ли она выполнение, путем

 'вызова метода 'irdaFileReceive.Status'

End Sub

Листинг 15.4. Класс IrDAFileSend

Option Strict On

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

'Этот класс является клиентом IrDA. Он осуществляет поиск сервера

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

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

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

Class IrDAFileSend

Private m_descriptionOfLastSendAttempt As String

Private m_IrDAServiceName As String

Private m_fileToSend As String

Поделиться с друзьями: