Next: 3.3.7 SampleSubjectのソース
Up: 3.3.6 通信の流れ
Previous: 3.3.6.2 2.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日