亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? answerer.cpp

?? ACE編程的一本經典BIBLE的源代碼,喜歡網絡編程的別錯過
?? CPP
字號:
/**
 * Answerer.cpp,v 1.7 2004/10/06 16:27:14 shuston Exp
 *
 * Streams Listing 01
 *
 * An answering machine based on a one-way ACE_Stream
 */

#include "ace/OS_NS_string.h"
#include "ace/Stream.h"
#include "ace/Message_Block.h"
#include "ace/FILE_IO.h"

#include "MessageInfo.h"
#include "Message.h"
#include "BasicTask.h"
#include "EndTask.h"
#include "Util.h"
#include "RecordingDevice.h"

// Listing 21 code/ch18
class AnswerIncomingCall : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("AnswerIncomingCall::process()"));

    if (message->recorder ()->answer_call () < 0)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("%p\n"),
                         ACE_TEXT ("AnswerIncomingCall")),
                        -1);
      return 0;
  }
};
// Listing 21

// Listing 22 code/ch18
class GetCallerId : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("GetCallerId::process()"));

    CallerId *id;
    id = message->recorder ()->retrieve_callerId ();
    if (!id)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("%p\n"),
                         ACE_TEXT ("GetCallerId")),
                        -1);

    message->caller_id (id);
    return 0;
  }
};
// Listing 22

// Listing 23 code/ch18
class PlayOutgoingMessage : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("PlayOutgoingMessage::process()"));

    ACE_FILE_Addr outgoing_message =
      this->get_outgoing_message (message);

    int pmrv =
      message->recorder ()->play_message (outgoing_message);
    if (pmrv < 0)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("%p\n"),
                         ACE_TEXT ("PlayOutgoingMessage")),
                        -1);
    return 0;
  }

  ACE_FILE_Addr get_outgoing_message (Message *)
  {
    // Exclude 23
    return ACE_FILE_Addr (ACE_TEXT ("/tmp/outgoing_message"));
    // Exclude 23
  }
};
// Listing 23

// Listing 24 code/ch18
class RecordIncomingMessage : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("RecordIncomingMessage::process()"));

    ACE_FILE_Addr incoming_message =
      this->get_incoming_message_queue ();

    MessageType *type =
      message->recorder ()->record_message (incoming_message);
    if (!type)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("%p\n"),
                         ACE_TEXT ("RecordIncomingMessage")),
                        -1);
    message->incoming_message (incoming_message, type);
    return 0;
  }

  ACE_FILE_Addr get_incoming_message_queue (void)
  {
    // Exclude 24
    return ACE_FILE_Addr (ACE_TEXT ("/tmp/incoming_message"));
    // Exclude 24
  }
};
// Listing 24

// Listing 25 code/ch18
class ReleaseDevice : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("ReleaseDevice::process()"));
    message->recorder ()->release ();
    return 0;
  }
};
// Listing 25

// Listing 26 code/ch18
class EncodeMessage : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("ReleaseDevice::process()"));

    ACE_FILE_Addr &incoming = message->addr ();
    ACE_FILE_Addr addr = this->get_message_destination (message);

    if (message->is_text ())
      Util::convert_to_unicode (incoming, addr);
    else if (message->is_audio ())
      Util::convert_to_mp3 (incoming, addr);
    else if (message->is_video ())
      Util::convert_to_mpeg (incoming, addr);

    message->addr (addr);
    return 0;
  }

  ACE_FILE_Addr get_message_destination (Message *)
  {
    // Exclude 26
    return ACE_FILE_Addr (ACE_TEXT ("/tmp/encoded_message"));
    // Exclude 26
  }
};
// Listing 26

// Listing 27 code/ch18
class SaveMetaData : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("SaveMetaData::process()"));

    ACE_TString path (message->addr ().get_path_name ());
    path += ACE_TEXT (".xml");

    ACE_FILE_Connector connector;
    ACE_FILE_IO file;
    ACE_FILE_Addr addr (path.c_str ());
    if (connector.connect (file, addr) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("%p\n"),
                         ACE_TEXT ("create meta-data file")),
                        0);

    file.truncate (0);
    this->write (file, "<Message>\n");
    // ...
    this->write (file, "</Message>\n");
    file.close ();
    return 0;
  }

private:
  int write (ACE_FILE_IO &file, const char *str)
  {
    return file.send (str, ACE_OS::strlen (str));
  }
};
// Listing 27

// Listing 28 code/ch18
class NotifySomeone : public BasicTask
{
protected:
  virtual int process (Message *message)
  {
    ACE_TRACE (ACE_TEXT ("NotifySomeone::process()"));

    // Format an email to tell someone about the
    // newly received message.
    // ...

    // Display message information in the logfile
    ACE_DEBUG ((LM_INFO,
                ACE_TEXT ("New message from %s ")
                ACE_TEXT ("received and stored at %s\n"),
                message->caller_id ()->string (),
                message->addr ().get_path_name ()));
    return 0;
  }
};
// Listing 28

// Listing 10 code/ch18
class RecordingStream : public ACE_Stream<ACE_MT_SYNCH>
{
public:
  typedef ACE_Stream<ACE_MT_SYNCH> inherited;
  typedef ACE_Module<ACE_MT_SYNCH> Module;

  RecordingStream () : inherited()
  { }
// Listing 10

  // Listing 1000 code/ch18
  virtual int open (void *arg,
                    Module *head = 0, Module *tail = 0)
  {
    if (tail == 0)
      ACE_NEW_RETURN (tail,
                      Module (ACE_TEXT ("End Module"), new EndTask ()),
                      -1);
    this->inherited::open (arg, head, tail);
    // Listing 1000

    // Listing 1001 code/ch18
    Module *answerIncomingCallModule;
    ACE_NEW_RETURN (answerIncomingCallModule,
                    Module (ACE_TEXT ("Answer Incoming Call"),
                            new AnswerIncomingCall ()),
                    -1);

    // Listing 11 code/ch18
    Module *getCallerIdModule;
    ACE_NEW_RETURN (getCallerIdModule,
                    Module (ACE_TEXT ("Get Caller ID"), new GetCallerId ()),
                    -1);
    // Listing 11

    Module *playOGMModule;
    ACE_NEW_RETURN (playOGMModule,
                    Module (ACE_TEXT ("Play Outgoing Message"),
                            new PlayOutgoingMessage ()),
                    -1);

    Module *recordModule;
    ACE_NEW_RETURN (recordModule,
                    Module (ACE_TEXT ("Record Incoming Message"),
                            new RecordIncomingMessage ()),
                    -1);

    Module *releaseModule;
    ACE_NEW_RETURN (releaseModule,
                    Module (ACE_TEXT ("Release Device"),
                            new ReleaseDevice ()),
                    -1);

    Module *conversionModule;
    ACE_NEW_RETURN (conversionModule,
                    Module (ACE_TEXT ("Encode Message"),
                            new EncodeMessage ()),
                    -1);

    Module *saveMetaDataModule;
    ACE_NEW_RETURN (saveMetaDataModule,
                    Module (ACE_TEXT ("Save Meta-Data"),
                            new SaveMetaData ()),
                    -1);

    Module *notificationModule;
    ACE_NEW_RETURN (notificationModule,
                    Module (ACE_TEXT ("Notify Someone"),
                            new NotifySomeone ()),
                    -1);
    // Listing 1001

    // Listing 12 code/ch18
    if (this->push (notificationModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("notificationModule")),
                        -1);
    if (this->push (saveMetaDataModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("saveMetaDataModule")),
                        -1);
    if (this->push (conversionModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("conversionModule")),
                        -1);
    if (this->push (releaseModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("releaseModule")),
                        -1);
    if (this->push (recordModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("recordModule")),
                        -1);
    if (this->push (playOGMModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("playOGMModule")),
                        -1);
    if (this->push (getCallerIdModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n"),
                         ACE_TEXT ("getCallerIdModule")),
                        -1);
    if (this->push (answerIncomingCallModule) == -1)
      ACE_ERROR_RETURN ((LM_ERROR,
                         ACE_TEXT ("Failed to push %p\n")
                         ACE_TEXT ("answerIncomingCallModule")),
                        -1);
    // Listing 12

    return 0;
  }

  // Listing 13 code/ch18
  int record (RecordingDevice *recorder)
  {
    ACE_Message_Block * mb;
    ACE_NEW_RETURN (mb, ACE_Message_Block (sizeof(Message)), -1);

    Message *message = (Message *)mb->wr_ptr ();
    mb->wr_ptr (sizeof(Message));

    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("RecordingStream::record() - ")
                ACE_TEXT ("message->recorder(recorder)\n")));
    message->recorder (recorder);

    int rval = this->put (mb);
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("RecordingStream::record() - ")
                ACE_TEXT ("this->put() returns %d\n"),
                rval));
    return rval;
  }
  // Listing 13
};


// Listing 1 code/ch18
int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  RecordingDevice *recorder =
    RecordingDeviceFactory::instantiate (argc, argv);
  // Listing 1

  // Listing 2 code/ch18
  RecordingStream *recording_stream;
  ACE_NEW_RETURN (recording_stream, RecordingStream, -1);

  if (recording_stream->open (0) < 0)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("%p\n"),
                       ACE_TEXT ("RecordingStream->open()")),
                      0);
  // Listing 2

  // Listing 3 code/ch18
  for (;;)
    {
      ACE_DEBUG ((LM_INFO,
                  ACE_TEXT ("Waiting for incoming message\n")));
      RecordingDevice *activeRecorder =
        recorder->wait_for_activity ();

      ACE_DEBUG ((LM_INFO,
                  ACE_TEXT ("Initiating recording process\n")));

      recording_stream->record (activeRecorder);
    }
  // Listing 3

  return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人久久精品77777最新版本| 午夜伦欧美伦电影理论片| 欧美色网一区二区| 99精品视频一区二区三区| 国产乱码字幕精品高清av | 精品久久一区二区三区| 色av成人天堂桃色av| 成人精品国产一区二区4080| 国产一区二区三区四区在线观看| 蜜臀av一区二区在线观看| 免费观看在线色综合| 亚洲一区二区在线视频| 自拍偷拍国产亚洲| 1000部国产精品成人观看| 国产精品久久免费看| 国产精品久久久久久妇女6080 | 奇米影视7777精品一区二区| 亚洲图片自拍偷拍| 亚洲国产成人高清精品| 亚洲国产wwwccc36天堂| 五月天精品一区二区三区| 日产国产欧美视频一区精品| 水野朝阳av一区二区三区| 日韩精品欧美精品| 久久电影国产免费久久电影| 久久se这里有精品| 国产福利一区二区三区在线视频| 国产精品自拍在线| 波多野结衣中文一区| 99精品视频免费在线观看| av中文字幕在线不卡| 色婷婷国产精品| 欧美日韩国产免费一区二区| 欧美大胆一级视频| 久久精品亚洲麻豆av一区二区 | 国产女主播视频一区二区| 久久精品人人爽人人爽| 中文字幕一区在线观看| 亚洲va欧美va国产va天堂影院| 午夜精品福利一区二区三区蜜桃| 蜜桃av噜噜一区二区三区小说| 国产精品99久| 欧美日韩一区二区三区四区五区| 欧美电影免费观看高清完整版在线| 国产片一区二区| 亚洲成av人片一区二区三区| 国产一区二区0| 在线精品国精品国产尤物884a| 日韩欧美国产精品一区| 亚洲免费在线电影| 波多野结衣在线一区| 欧洲av一区二区嗯嗯嗯啊| 欧美成人精品3d动漫h| 国产精品久久一级| 秋霞国产午夜精品免费视频| 99久久精品久久久久久清纯| 欧美一区二区人人喊爽| 最新国产成人在线观看| 精品一区二区国语对白| 91传媒视频在线播放| 久久久精品人体av艺术| 91精品国产欧美日韩| 9人人澡人人爽人人精品| 欧美午夜理伦三级在线观看| 国产欧美一区二区三区在线看蜜臀 | 国产成人免费视频精品含羞草妖精| 欧美成人三级在线| 国产福利视频一区二区三区| 国产精品欧美经典| 在线观看视频一区二区 | 亚洲精品久久久蜜桃| 欧美日韩和欧美的一区二区| 久久精品国产亚洲高清剧情介绍| 欧美激情中文字幕| 欧美中文字幕一区| 久久er精品视频| 亚洲图片你懂的| 91精品国产欧美日韩| 成人av动漫网站| 亚洲一卡二卡三卡四卡五卡| 精品国产第一区二区三区观看体验| 大尺度一区二区| 香蕉成人伊视频在线观看| 久久精品男人的天堂| 色综合天天狠狠| 国产一区二区三区综合| 亚洲欧美日韩中文字幕一区二区三区| 56国语精品自产拍在线观看| www.成人网.com| 伦理电影国产精品| 亚洲综合免费观看高清在线观看| 精品免费日韩av| 在线观看一区二区视频| 国产成人三级在线观看| 天天操天天综合网| 亚洲天堂免费看| 久久精品人人做| 日韩欧美不卡在线观看视频| 欧美自拍丝袜亚洲| 粉嫩嫩av羞羞动漫久久久| 日韩激情在线观看| 亚洲欧美日韩国产一区二区三区| 精品少妇一区二区三区| 欧美精选在线播放| 成人av在线电影| 国产一区二区精品久久99| 日本不卡123| 亚洲一二三四在线| 国产精品久久久99| 国产喂奶挤奶一区二区三区| 欧美一区二区三区色| 欧美日韩另类一区| 日本高清不卡一区| 99国产精品久久久久久久久久| 国产精品系列在线观看| 黄页网站大全一区二区| 美女在线一区二区| 日韩专区欧美专区| 亚洲国产aⅴ天堂久久| 一区二区三区国产| 亚洲免费色视频| 亚洲乱码精品一二三四区日韩在线| 国产精品美女久久久久久 | 免费在线观看视频一区| 午夜国产不卡在线观看视频| 亚洲国产色一区| 一区二区免费视频| 亚洲激情男女视频| 一区二区高清视频在线观看| 一区二区三区在线视频免费| 亚洲欧美二区三区| 亚洲一区二区av在线| 亚洲国产成人高清精品| 一区二区欧美精品| 午夜精品一区在线观看| 亚洲成人动漫在线观看| 丝袜诱惑亚洲看片| 蜜臀久久99精品久久久久久9| 美女一区二区三区| 久久超级碰视频| 国产精品一区二区在线观看不卡| 丁香亚洲综合激情啪啪综合| 91丨porny丨国产| 欧美网站一区二区| 欧美xxxxx裸体时装秀| 久久久99久久精品欧美| 亚洲欧洲日产国码二区| 亚洲电影视频在线| 麻豆久久久久久久| 成人晚上爱看视频| 欧美午夜寂寞影院| 精品日韩av一区二区| 亚洲国产精品99久久久久久久久| 亚洲三级在线免费观看| 亚洲五月六月丁香激情| 丁香六月综合激情| 91影院在线观看| 91麻豆精品国产自产在线| 久久久久一区二区三区四区| 亚洲免费在线视频一区 二区| 日韩av一区二区三区| 国产成人av电影在线观看| 欧美三级电影一区| 国产人久久人人人人爽| 亚洲福利一区二区| 国产福利一区二区| 欧美日韩亚洲综合在线| 国产日韩欧美精品一区| 香港成人在线视频| 成+人+亚洲+综合天堂| 欧美日韩第一区日日骚| 国产精品网曝门| 视频在线观看国产精品| 99九九99九九九视频精品| 91精品国产91综合久久蜜臀| 日韩一区有码在线| 久久超碰97中文字幕| 色94色欧美sute亚洲线路二| 日韩精品一区二| 亚洲午夜久久久久久久久电影网| 国产精品1024久久| 91精品国产综合久久福利软件| 国产精品久久久99| 狠狠色丁香久久婷婷综| 欧美日韩国产片| 亚洲视频 欧洲视频| 国产激情精品久久久第一区二区| 欧美日韩国产123区| 国产精品久久久久久久久晋中| 麻豆成人久久精品二区三区红 | 国产成人99久久亚洲综合精品| 欧美剧在线免费观看网站| 亚洲欧洲一区二区三区| 国产精品主播直播| 欧美成人午夜电影| 日本不卡视频在线| 在线不卡中文字幕| 亚洲v中文字幕| 精品视频1区2区| 亚洲精品老司机|