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

ЖАНРЫ

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

Shared g_failureCode As SimulatedFailures = _

SimulatedFailures.noFailurePending

'Список сбоев, которые мы хотим имитировать

public enum SimulatedFailures

noFailurePending 'No test failures pending

'Имитируемые сбои:

failInNextWriteSocketCode

failInNextWebServiceCall

failInNextFileIODuringFileOpen

failInNextFileIODuringFileRead

так далее

End Enum

#End If 'DEBUG_SIMULATE_FAILURES

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

'Функция, которую мы используем для передачи данных.

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

Private Sub writeDataToSocket( _

ByVal mySocket As System.Net.Sockets.Socket, _

ByVal dataToSend As Byte)

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

'Этот код следует компилировать лишь при тестировании сетевых сбоев

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

#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

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