next up previous
Next: 3.3.7 SampleSubjectのソース Up: 3.3.6 通信の流れ Previous: 3.3.6.2 2.SampleSubject::Ready()

3.3.6.3 3.SampleSubject::Ready()

データを受け取って表示する.オブザーバSampleObserver.ReceiveString.char.Oが AssertReady()を呼ぶことで,再びサブジェクトSampleSubject.SendString.char.S に対してデータを送るように要求する.これによって,SampleSubject::Ready()と SampleObserver::Notify()が繰り返される.

[SampleSubjectのReady()]

void 
SampleSubject::Ready(const OReadyEvent& event)
{ 
 OSYSPRINT(("SampleSubject::Ready() : %s\n",
     event.IsAssert() ? "ASSERT READY" : 
                        "DEASSERT READY"));
  
 static int counter = 0;
 char str[32];
  
 if (counter == 0) {
  //1回目の送信データ
  strcpy(str, "!!! Hello world !!!");
  //データをセットする
  subject[sbjSendString]->SetData(str,sizeof(str));  
 //オブザーバにデータ送信
  subject[sbjSendString]->NotifyObservers();  
   
 } else if (counter == 1) {
  //2回目の送信データ
  strcpy(str, "!!! Hello world again !!!");
 //データをセットする
  subject[sbjSendString]->SetData(str,sizeof(str));
 //オブザーバにデータ送信
  subject[sbjSendString]->NotifyObservers();  
  
 }
 
 counter++;
}

[SampleObserverのNotify()]

void
SampleObserver::Notify(const ONotifyEvent& event)
{
 //データを受信
  const char* text = (const char *)event.Data(0);
 //データを表示
  OSYSPRINT(("SampleObserver::Notify() %s\n", text));
 //再びサブジェクトに対して,データ送信を要求
  observer[event.ObsIndex()]->AssertReady();
}


generated through LaTeX2HTML. M.Inaba 平成18年5月6日