00001
00002
00003
00004
00005
00006
00008
00009 #include <string>
00010 #include <vector>
00011 #include <algorithm>
00012
00013 #include <ipc/partition.h>
00014
00015
00016
00017 #include <is/info.h>
00018 #include <is/infodictionary.h>
00019 #include <is/infoiterator.h>
00020 #include <is/inforeceiver.h>
00021 #include <is/infoT.h>
00022 #include <unistd.h>
00023
00024 using namespace std;
00025
00026 #include "sctddc/SCTDdcRequest.hxx"
00027
00028 SCTDdcRequest::SCTDdcRequest(IPCPartition& partition, string& isServer)
00029 : m_requestReady(false), m_partition(partition), m_requestServer(isServer)
00030 {
00031 m_infoReceiver = new ISInfoReceiver(partition);
00032 }
00033
00034
00035 void SCTDdcRequest::requestReady_vec_init(unsigned int vecSize)
00036 {
00037
00038 m_requestReady_vec_index = 0;
00039
00040 m_requestReady_vec.erase(m_requestReady_vec.begin(), m_requestReady_vec.end());
00041
00042 for(unsigned int i=0; i<vecSize; i++)
00043 m_requestReady_vec.push_back(false);
00044
00045 m_floatVecRequestResponse.erase(m_floatVecRequestResponse.begin(),
00046 m_floatVecRequestResponse.end());
00047 }
00048
00049
00050 bool SCTDdcRequest::getRequestReady_vec()
00051 {
00052 bool allRequestReady = true;
00053 for(unsigned int i=0; i<m_requestReady_vec.size(); i++)
00054 allRequestReady = allRequestReady && m_requestReady_vec[i];
00055 return allRequestReady;
00056 }
00057
00058
00059 void SCTDdcRequest::setRequestReady_vec(bool request)
00060 {
00061 m_requestReady_vec[m_requestReady_vec_index] = request;
00062 m_requestReady_vec_index++;
00063 }
00064
00065 void requestCallback(ISCallbackInfo* isCallback)
00066
00067 {
00068 std::string value_str;
00069 OWLDate value_date;
00070 OWLTime value_time;
00071
00072 SCTDdcRequest* sctDdcRequest = (SCTDdcRequest*)(isCallback->parameter());
00073
00074
00075 ISInfoAny dcsData;
00076 if(isCallback->reason() != is::Deleted)
00077 {
00078 string dpeName = isCallback->name();
00079 isCallback->value(dcsData);
00080 }
00081
00082 int N = dcsData.countAttributes( );
00083
00084
00085 for (int i=0; i<N; i++)
00086 {
00087 switch(dcsData.getAttributeType())
00088 {
00089 case ISType::Boolean:
00090
00091 bool value_bool;
00092 dcsData >> value_bool;
00093 sctDdcRequest->setIntRequestResponse(int(value_bool));
00094 sctDdcRequest->setFloatRequestResponse(float(value_bool));
00095 sctDdcRequest->setRequestReady(true);
00096 break;
00097 case ISType::S8:
00098 case ISType::U8:
00099 case ISType::S16:
00100
00101 short value_s;
00102 dcsData >> value_s;
00103 sctDdcRequest->setIntRequestResponse(int(value_s));
00104 sctDdcRequest->setFloatRequestResponse(float(value_s));
00105 sctDdcRequest->setRequestReady(true);
00106 break;
00107 case ISType::U16:
00108
00109 unsigned short value_us;
00110 dcsData >> value_us;
00111 sctDdcRequest->setIntRequestResponse(int(value_us));
00112 sctDdcRequest->setFloatRequestResponse(float(value_us));
00113 sctDdcRequest->setRequestReady(true);
00114 break;
00115 case ISType::S32:
00116
00117 long value_int;
00118 dcsData >> value_int;
00119 sctDdcRequest->setIntRequestResponse(value_int);
00120 sctDdcRequest->setFloatRequestResponse(float(value_int));
00121 sctDdcRequest->setRequestReady(true);
00122 break;
00123 case ISType::U32:
00124
00125 unsigned long value_uint;
00126 dcsData >> value_uint;
00127 sctDdcRequest->setIntRequestResponse(value_uint);
00128 sctDdcRequest->setFloatRequestResponse(float(value_uint));
00129 sctDdcRequest->setRequestReady(true);
00130 break;
00131 case ISType::Float:
00132
00133 float value_float;
00134 dcsData >> value_float;
00135 sctDdcRequest->setFloatRequestResponse(value_float);
00136 sctDdcRequest->setIntRequestResponse(int(value_float));
00137 sctDdcRequest->setRequestReady(true);
00138 break;
00139 case ISType::Double:
00140
00141 double value_d;
00142 dcsData >> value_d;
00143 sctDdcRequest->setFloatRequestResponse(float(value_d));
00144 sctDdcRequest->setIntRequestResponse(int(value_d));
00145 sctDdcRequest->setRequestReady(true);
00146 break;
00147 case ISType::String:
00148
00149 dcsData >> value_str;
00150 sctDdcRequest->setStringRequestResponse(value_str);
00151 sctDdcRequest->setRequestReady(true);
00152 break;
00153
00154 case ISType::Date:
00155
00156 dcsData >> value_date;
00157 std::cerr<<"SCTDdcRequest::requestCallback() DDC_ERROR: variable from dcs is date, "
00158 <<"not implemented inddcRequest class"<< std::endl;
00159 break;
00160 case ISType::Time:
00161
00162 dcsData >> value_time;
00163
00164
00165 break;
00166
00167
00168 default:
00169 cout << "SCTDdcRequest::requestCallback() DDC_ERROR: Invalid Type"
00170 << (long)dcsData.getAttributeType() << std::endl;
00171 }
00172 }
00173 }
00174
00175
00176 void floatArrayRequestCallback(ISCallbackInfo* isCallback)
00177
00178 {
00179 OWLTime value_time;
00180
00181 SCTDdcRequest* sctDdcRequest = (SCTDdcRequest*)(isCallback->parameter());
00182
00183
00184 ISInfoAny dcsData;
00185 if(isCallback->reason() != is::Deleted)
00186 {
00187 string dpeName = isCallback->name();
00188 isCallback->value(dcsData);
00189 }
00190
00191
00192 dcsData >> value_time;
00193
00194
00195 float *float_array;
00196 size_t array_size;
00197
00198 dcsData.get(&float_array, array_size);
00199 sctDdcRequest->setFloatArrayRequestResponse(float_array, int(array_size));
00200 sctDdcRequest->setRequestReady(true);
00201
00202 return;
00203 }
00204
00205
00206 void requestFloatVecCallback(ISCallbackInfo* isCallback)
00207
00208 {
00209 std::string value_str;
00210 OWLDate value_date;
00211 OWLTime value_time;
00212 string dpeName;
00213
00214
00215 SCTDdcRequest* sctDdcRequest = (SCTDdcRequest*)(isCallback->parameter());
00216
00217
00218 ISInfoAny dcsData;
00219 if(isCallback->reason() != is::Deleted)
00220 {
00221 dpeName = isCallback->name();
00222
00223 unsigned int position = dpeName.find(".Recv");
00224 if(position != string::npos) dpeName = dpeName.substr(0,position);
00225 position = dpeName.find(".Send");
00226 if(position != string::npos) dpeName = dpeName.substr(0,position);
00227 dpeName = dpeName.substr(dpeName.find_last_of(".")+1, dpeName.size());
00228 isCallback->value(dcsData);
00229 }
00230
00231 int N = dcsData.countAttributes( );
00232
00233
00234 for (int i=0; i<N; i++)
00235 {
00236 switch(dcsData.getAttributeType())
00237 {
00238 case ISType::Boolean:
00239
00240 bool value_bool;
00241 dcsData >> value_bool;
00242 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_bool));
00243 sctDdcRequest->setRequestReady_vec(true);
00244 break;
00245 case ISType::S8:
00246 case ISType::U8:
00247 case ISType::S16:
00248
00249 short value_s;
00250 dcsData >> value_s;
00251 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_s));
00252 sctDdcRequest->setRequestReady_vec(true);
00253 break;
00254 case ISType::U16:
00255
00256 unsigned short value_us;
00257 dcsData >> value_us;
00258 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_us));
00259 sctDdcRequest->setRequestReady_vec(true);
00260 break;
00261 case ISType::S32:
00262
00263 long value_int;
00264 dcsData >> value_int;
00265 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_int));
00266 sctDdcRequest->setRequestReady_vec(true);
00267 break;
00268 case ISType::U32:
00269
00270 unsigned long value_uint;
00271 dcsData >> value_uint;
00272 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_uint));
00273 sctDdcRequest->setRequestReady_vec(true);
00274 break;
00275 case ISType::Float:
00276
00277 float value_float;
00278 dcsData >> value_float;
00279 sctDdcRequest->setfloatVecRequestResponse(dpeName, value_float);
00280 sctDdcRequest->setRequestReady_vec(true);
00281 break;
00282 case ISType::Double:
00283
00284 double value_d;
00285 dcsData >> value_d;
00286 sctDdcRequest->setfloatVecRequestResponse(dpeName, float(value_d));
00287 sctDdcRequest->setRequestReady_vec(true);
00288 break;
00289 case ISType::String:
00290
00291 dcsData >> value_str;
00292 std::cerr
00293 <<"SCTDdcRequest::requestFloatVecCallback(..) DDC_ERROR: variable ("<<dpeName
00294 <<") is string, that is not supported in ddcRequest class"<< std::endl;
00295 break;
00296 case ISType::Date:
00297
00298 dcsData >> value_date;
00299 std::cerr
00300 <<"SCTDdcRequest::requestFloatVecCallback(..) DDC_ERROR: variable ("<<dpeName
00301 <<") is date, that is not supported in ddcRequest class"<< std::endl;
00302 break;
00303 case ISType::Time:
00304
00305 dcsData >> value_time;
00306
00307
00308 break;
00309
00310 default:
00311 cout << "SCTDdcRequest::requestCallback() DDC_ERROR: Invalid Type"
00312 << (long)dcsData.getAttributeType() << std::endl;
00313 }
00314 }
00315
00316 }
00317
00318
00319
00320 void SCTDdcRequest::ddcSendRequest(string& dpeName, int& value, int timeout)
00321
00322 {
00323
00324 ISInfo::Status rc;
00325
00326 string server_dpeName = m_requestServer + "." + dpeName;
00327
00328
00329 rc = m_infoReceiver->subscribe(server_dpeName.c_str(), requestCallback, (void*)this);
00330 if(rc != ISInfo::Success)
00331 {
00332 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << server_dpeName
00333 << " subscription fault " << rc << ". No IS server to send request" << endl;
00334 }
00335
00336 time_t startRequestTime = time(&startRequestTime);
00337
00338
00339
00340 ISInfo::Status exportResult = ISInfo::Success;
00341 string isObName;
00342 time_t currTime;
00343
00344 isObName = m_requestServer + '.';
00345 isObName += DAQ_DATA_REQUEST;
00346
00347 DcsSingleData<string>* ddcRequestForData
00348 = new DcsSingleData<string>(time(&currTime), m_partition, (char*)isObName.c_str());
00349 ddcRequestForData->setValue(server_dpeName);
00350 exportResult = ddcRequestForData->checkin();
00351 if(exportResult == ISInfo::CommFailure)
00352 {
00353 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: "
00354 << ctime((const time_t*)&currTime) << " IS server "
00355 << m_requestServer << " for DAQ's data requests in partition "
00356 << m_partition.name() << " does not run!" << endl;
00357 }
00358
00359
00360
00361
00362 int deltaRequestTime = 0;
00363 while(!m_requestReady && deltaRequestTime< timeout)
00364 {
00365 usleep(10);
00366 time_t timenow = time(&timenow);
00367 deltaRequestTime = timenow - startRequestTime;
00368 }
00369
00370 if(!m_requestReady)
00371 {
00372 cerr << "DDC_ERROR: request waiting time for "<<dpeName
00373 <<" is out!!, stupid value is returned!!"<<endl;
00374 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00375 value = 9999999;
00376 delete ddcRequestForData;
00377 return;
00378 }
00379
00380
00381 value = m_intRequestResponse;
00382
00383 m_requestReady = false;
00384
00385
00386 ddcRequestForData->remove();
00387 delete ddcRequestForData;
00388 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00389
00390
00391 return;
00392 }
00393
00394
00395
00396 void SCTDdcRequest::ddcSendRequest(string& dpeName, float* float_array, int& array_size, int timeout)
00397
00398 {
00399
00400 ISInfo::Status rc;
00401
00402 string server_dpeName = m_requestServer + "." + dpeName;
00403
00404
00405 rc = m_infoReceiver->subscribe(server_dpeName.c_str(),
00406 floatArrayRequestCallback, (void*)this);
00407 if(rc != ISInfo::Success)
00408 {
00409 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << server_dpeName
00410 << " subscription fault " << rc << ". No IS server to send request" << endl;
00411 }
00412
00413 time_t startRequestTime = time(&startRequestTime);
00414
00415
00416
00417 ISInfo::Status exportResult = ISInfo::Success;
00418 string isObName;
00419 time_t currTime;
00420
00421 isObName = m_requestServer + '.';
00422 isObName += DAQ_DATA_REQUEST;
00423
00424 DcsSingleData<string>* ddcRequestForData
00425 = new DcsSingleData<string>(time(&currTime), m_partition, (char*)isObName.c_str());
00426 ddcRequestForData->setValue(server_dpeName);
00427 exportResult = ddcRequestForData->checkin();
00428 if(exportResult == ISInfo::CommFailure)
00429 {
00430 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: "
00431 << ctime((const time_t*)&currTime) << " IS server "
00432 << m_requestServer << " for DAQ's data requests in partition "
00433 << m_partition.name() << " does not run!" << endl;
00434 }
00435
00436
00437
00438
00439 int deltaRequestTime = 0;
00440 while(!m_requestReady && deltaRequestTime< timeout)
00441 {
00442 usleep(10);
00443 time_t timenow = time(&timenow);
00444 deltaRequestTime = timenow - startRequestTime;
00445 }
00446
00447 if(!m_requestReady)
00448 {
00449 cerr << "DDC_ERROR: request waiting time for "<<dpeName
00450 <<" is out!!, stupid value is returned!!"<<endl;
00451 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00452 float_array = NULL;
00453 delete ddcRequestForData;
00454 return;
00455 }
00456
00457
00458 array_size = m_floatArraySizeRequestResponse;
00459 for(int i=0; i<array_size; i++)
00460 {
00461 float_array[i] = m_floatArrayRequestResponse[i];
00462 }
00463
00464 m_requestReady = false;
00465
00466
00467 ddcRequestForData->remove();
00468 delete ddcRequestForData;
00469 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00470
00471 return;
00472 }
00473
00474
00475
00476 void SCTDdcRequest::ddcSendRequest(string& dpeName, float& value, int timeout)
00477
00478 {
00479
00480 ISInfo::Status rc;
00481
00482 string server_dpeName = m_requestServer + "." + dpeName;
00483
00484
00485 rc = m_infoReceiver->subscribe(server_dpeName.c_str(), requestCallback, (void*)this);
00486 if(rc != ISInfo::Success)
00487 {
00488 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << server_dpeName
00489 << " subscription fault " << rc << ". No IS server to send request" << endl;
00490 }
00491
00492 time_t startRequestTime = time(&startRequestTime);
00493
00494
00495
00496 ISInfo::Status exportResult = ISInfo::Success;
00497 string isObName;
00498 time_t currTime;
00499
00500 isObName = m_requestServer + '.';
00501 isObName += DAQ_DATA_REQUEST;
00502
00503 DcsSingleData<string>* ddcRequestForData
00504 = new DcsSingleData<string>(time(&currTime), m_partition, (char*)isObName.c_str());
00505 ddcRequestForData->setValue(server_dpeName);
00506 exportResult = ddcRequestForData->checkin();
00507 if(exportResult == ISInfo::CommFailure) {
00508 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << ctime((const time_t*)&currTime)
00509 << " IS server "
00510 << m_requestServer << " for DAQ's data requests in partition "
00511 << m_partition.name() << " does not run!" << endl;
00512 }
00513
00514
00515
00516
00517 int deltaRequestTime = 0;
00518 while(!m_requestReady && deltaRequestTime< timeout)
00519 {
00520 usleep(10);
00521 time_t timenow = time(&timenow);
00522 deltaRequestTime = timenow - startRequestTime;
00523 }
00524
00525 if(!m_requestReady)
00526 {
00527 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: request waiting time for "
00528 <<dpeName<<" is out!!"<<endl;
00529 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00530 value = 9999999;
00531 delete ddcRequestForData;
00532 return;
00533 }
00534
00535
00536 value = m_floatRequestResponse;
00537
00538 m_requestReady = false;
00539
00540
00541 ddcRequestForData->remove();
00542 delete ddcRequestForData;
00543 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00544
00545 return;
00546 }
00547
00548
00549
00550 void SCTDdcRequest::ddcSendRequest(string& dpeName, string& value, int timeout)
00551
00552 {
00553
00554 ISInfo::Status rc;
00555
00556 string server_dpeName = m_requestServer + "." + dpeName;
00557
00558
00559 rc = m_infoReceiver->subscribe(server_dpeName.c_str(), requestCallback, (void*)this);
00560 if(rc != ISInfo::Success)
00561 {
00562 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << server_dpeName
00563 << " subscription fault " << rc << ". No IS server to send request" << endl;
00564 }
00565
00566 time_t startRequestTime = time(&startRequestTime);
00567
00568
00569
00570 ISInfo::Status exportResult = ISInfo::Success;
00571 string isObName;
00572 time_t currTime;
00573
00574 isObName = m_requestServer + '.';
00575 isObName += DAQ_DATA_REQUEST;
00576
00577 DcsSingleData<string>* ddcRequestForData
00578 = new DcsSingleData<string>(time(&currTime), m_partition, (char*)isObName.c_str());
00579 ddcRequestForData->setValue(server_dpeName);
00580 exportResult = ddcRequestForData->checkin();
00581 if(exportResult == ISInfo::CommFailure) {
00582 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: "
00583 << ctime((const time_t*)&currTime) << " IS server "
00584 << m_requestServer << " for DAQ's data requests in partition "
00585 << m_partition.name() << " does not run!" << endl;
00586 }
00587
00588
00589
00590
00591 int deltaRequestTime = 0;
00592 while(!m_requestReady && deltaRequestTime< timeout)
00593 {
00594 usleep(10);
00595 time_t timenow = time(&timenow);
00596 deltaRequestTime = timenow - startRequestTime;
00597 }
00598
00599 if(!m_requestReady)
00600 {
00601 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: request waiting time for "
00602 <<dpeName<<" is out!!"<<endl;
00603 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00604 value = 9999999;
00605 delete ddcRequestForData;
00606 return;
00607 }
00608
00609
00610 value = m_stringRequestResponse;
00611
00612 m_requestReady = false;
00613
00614
00615 ddcRequestForData->remove();
00616 delete ddcRequestForData;
00617 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00618
00619 return;
00620 }
00621
00622
00623
00624 void SCTDdcRequest::ddcSendRequest(std::vector<string>& dpeName_vec,
00625 std::map<string, float>& values_map, int timeout)
00626
00627 {
00628
00629 ISInfo::Status rc;
00630
00631 unsigned int numberOfRequest = dpeName_vec.size();
00632
00633 std::vector<string> server_dpeName;
00634
00635 for(unsigned int i_requ=0; i_requ<numberOfRequest; i_requ++)
00636 {
00637
00638 server_dpeName.push_back(m_requestServer + "." + dpeName_vec[i_requ]);
00639
00640 rc = m_infoReceiver->subscribe(server_dpeName[i_requ].c_str(), requestFloatVecCallback,
00641 (void*)this);
00642 if(rc != ISInfo::Success)
00643 {
00644 cerr << " SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << server_dpeName[i_requ]
00645 << " subscription fault " << rc << ". No IS server to send request" << endl;
00646 }
00647 }
00648
00649
00650 requestReady_vec_init(numberOfRequest);
00651
00652 time_t startRequestTime = time(&startRequestTime);
00653
00654
00655
00656
00657 ISInfo::Status exportResult = ISInfo::Success;
00658 string isObName;
00659 time_t currTime;
00660
00661 isObName = m_requestServer + '.';
00662 isObName += DAQ_DATA_REQUEST;
00663
00664 DcsDataArray<string>* ddcRequestForData
00665 = new DcsDataArray<string>(time(&currTime), m_partition, (char*)isObName.c_str());
00666 for(unsigned int i_requ=0; i_requ<numberOfRequest; i_requ++)
00667 {
00668 ddcRequestForData->addValue(server_dpeName[i_requ]);
00669 }
00670
00671 exportResult = ddcRequestForData->checkin();
00672
00673 if(exportResult == ISInfo::CommFailure)
00674 {
00675 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: " << ctime((const time_t*)&currTime)
00676 << " IS server "
00677 << m_requestServer << " for DAQ's data requests in partition "
00678 << m_partition.name() << " does not run!" << endl;
00679 }
00680
00681
00682
00683 int deltaRequestTime = 0;
00684 while(!getRequestReady_vec() && deltaRequestTime< timeout)
00685 {
00686 usleep(10);
00687 time_t timenow = time(&timenow);
00688 deltaRequestTime = timenow - startRequestTime;
00689 }
00690
00691
00692 if(!getRequestReady_vec())
00693 {
00694 cerr << "SCTDdcRequest::ddcSendRequest() DDC_ERROR: request waiting time for vector"
00695 <<" of float is out, or may be just some of the requests didn't come!!"<<endl;
00696 }
00697
00698
00699 values_map = m_floatVecRequestResponse;
00700
00701
00702 ddcRequestForData->remove();
00703 delete ddcRequestForData;
00704
00705
00706 for(unsigned int i_requ=0; i_requ<numberOfRequest; i_requ++)
00707 {
00708
00709 string server_dpeName = m_requestServer + "." + dpeName_vec[i_requ];
00710
00711 m_infoReceiver->unsubscribe(server_dpeName.c_str());
00712 }
00713
00714 return;
00715 }
00716
00717
00718 void getCallback(ISCallbackInfo* isCallback)
00719
00720 {
00721 OWLTime value_time;
00722
00723 float *value = (float*)(isCallback->parameter());
00724
00725
00726 ISInfoAny dcsData;
00727
00728 if(isCallback->reason() != is::Deleted)
00729 {
00730 isCallback->value(dcsData);
00731 }
00732
00733
00734 int N = dcsData.countAttributes( );
00735
00736 for ( int i = 0; i < N; i++ )
00737 {
00738 switch ( dcsData.getAttributeType() )
00739 {
00740 case ISType::Float:
00741
00742 dcsData >> *value;
00743 break;
00744
00745 case ISType::Time:
00746
00747 dcsData >> value_time;
00748 break;
00749
00750 default:
00751 cout << " SCTDdcRequest::getCallback() ERROR: Invalid Type"
00752 << (long)dcsData.getAttributeType() << std::endl;
00753 }
00754 }
00755 return;
00756 }
00757
00758
00759 void SCTDdcRequest::readFromIS(string dpeName, float& value)
00760
00761 {
00762
00763 ISInfo::Status rc;
00764
00765 string server_dpeName = "DDC_DT." + dpeName;
00766
00767
00768 rc = m_infoReceiver->subscribe(server_dpeName.c_str(), getCallback, (void*)(&value));
00769 if(rc != ISInfo::Success)
00770 {
00771 cerr << "SCTDdcRequest::readFromIS() DDC_ERROR: " << server_dpeName
00772 << " subscription fault " << rc << ". No IS server to send request" << endl;
00773 }
00774 return;
00775 }
00776