Литмир - Электронная Библиотека
Содержание  
A
A

 }

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

Листинг 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

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

 private void setStatus(ReceiveStatus newStatus) {

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

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

  lock(this) {

   m_ReceiveStatus = newStatus;

  } //конец lock

 }

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

 // [in] filename: желаемое имя для входного файла IR

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

 public IrDAFileReceive(string filename, string irdaServiceName) {

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

  m_IrDAServiceName = irdaServiceName;

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

  m_fileNameForDownload = filename;

 }

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

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

 //

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

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

 public void WaitForIRFileDownloadAsync() {

  //Заметьте, что сейчас мы находимся в режиме подготовки

  setStatus(ReceiveStatus.NotDone_SettingUp);

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

  //Создать новый поток

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

  System.Threading.ThreadStart threadEntryPoint;

  threadEntryPoint =

   new System.Threading.ThreadStart(WaitForIRFileDownload);

  System.Threading.Thread newThread = new System.Threading.Thread(threadEntryPoint);

  //Запустить поток на выполнение

  newThread.Start();

 }

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

 //Открывает порт IR и ожидает загрузки файла

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

 public void WaitForIRFileDownload() {

  System.IO.Stream outputStream = null;

  System.Net.Sockets.IrDAClient irdaClient = null;

  System.IO.Stream irStreamIn = null;

  try {

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

   //Задать и загрузить файл!

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

   internal WaitForIRFileDownload(ref outputStream,ref irdaClient, ref irStreamIn);

  } catch

199
{"b":"947732","o":1}