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

  //#2: IR-запрос был отменен (кто-то вызвал функцию STOP).

  if (m_wasSenderStopped == true) {

   irDASender.Close;

   irDASender = null;

   return false;

  }


  //==========================================

  //ПЕРЕДАТЬ ДАННЫЕ!

  //==========================================


  //Открыть файл, который мы хотим передать

  streamInFromFile = System.IO.File.OpenRead(m_fileToSend);


  //Открыть сокет IrDA, которому мы хотим передать данные

  streamOutToIrDA = irDASender.GetStream;


  const int BUFFER_SIZE = 1024;

  byte[] inBuffer = new byte[BUFFER_SIZE];

  int bytesRead;

  int iTestAll = 0;

  int iTestWrite = 0;

  do {

   //Считать байты из файла

   bytesRead = streamInFromFile.Read(inBuffer, 0, BUFFER_SIZE);

   iTestAll = iTestAll + 1;


   //Записать байты в наш выходной поток

   if (bytesRead > 0) {

    streamOutToIrDA.Write(inBuffer, 0, bytesRead);

    iTestWrite = iTestWrite + 1;

   }

  } while (bytesRead > 0);


  //Сбросить выходной поток

  streamOutToIrDA.Flush; //Закончить запись любых данных

  streamOutToIrDA.Close; //Закрыть поток

  streamOutToIrDA = null;


  //Освободить локальный файл

  streamInFromFile.Close;

  streamOutToIrDA = null;


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

  irDASender.Close;

  irDASender = null;


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

  return true;

 }

} //конец класса

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

//-------------------------------------------------------------------

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

//

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

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

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

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

//-------------------------------------------------------------------

public class IrDAFileReceive {

 private bool m_wasListenerStopped;

 private string m_IrDAServiceName;

 private string m_fileNameForDownload;

 private string m_errorDuringTransfer;

 private System.Net.Sockets.IrDAListener m_irListener;

 private ReceiveStatus m_ReceiveStatus;

 public string ErrorText {

  get {

   return m_errorDuringTransfer;

  }

 }


 //--------------------------

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

 //--------------------------

 public enum ReceiveStatus {

  NotDone_SettingUp,

  NotDone_WaitingForSender,

  NotDone_Receiving,

  Done_Success,

  Done_Aborted,

  Done_ErrorOccured

 }


 //------------------------------

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

 //------------------------------

 public ReceiveStatus Status {

  get {

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

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

   lock(this) {

    return m_ReceiveStatus;

   } //конец lock

  } //конец get

 } //конец свойства


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

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

Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

Эндрю Хант , Дэвид Томас , А. Алексашин

Программирование / Книги по IT