ROOT logo
void GetValues(const char* host, Int_t port, const char* request,
	Long_t startTime, Long_t endTime) 
{

	AliDCSClient client(host, port, 10000, 5);

	Int_t result;

	TTimeStamp currentTime;
	TMap values;

	TString rString(request);

	TObjArray* requests = rString.Tokenize(",");

	cout<<"Requests: "<<requests->GetEntries()<<endl;

	TStopwatch sw;
	sw.Start();

	if (requests->GetEntries() > 1) {
		
		TIter iter(requests);
		TObjString* aString;
		while ((aString = (TObjString*) iter.Next())) {
			values.Add(new TObjString(aString->String()), NULL);
		}	
		
		result = client.GetDPValues(startTime, endTime, values);

	} else {
		TObjArray* valueSet = new TObjArray();
		valueSet->SetOwner(1);

		values.Add(new TObjString(request), valueSet);

		result = client.GetDPValues(request, startTime,
				endTime, *valueSet);
	}

	if (result < 0) {
		cout<<"Communication failure: "<<
			AliDCSClient::GetErrorString(result)<<endl;

		if (result == AliDCSClient::fgkServerError) {
			cout<<"Server error code: "<<
				client.GetServerErrorCode()<<endl;
			cout<<client.GetServerError()<<endl;
		}
	}
	
	sw.Stop();
	cout<<"Elapsed time: "<<sw.RealTime()<<endl;
	if (result > 0) {
		cout<<"Time per value: "<<sw.RealTime()/result<<endl;
	}
	cout<<"Received values: "<<result<<endl;

	TIter iter(&values);
	TObjString* aRequest;
	while ((aRequest = (TObjString*) iter.Next())) {

		TObjArray* valueSet = (TObjArray*) values.GetValue(aRequest);
		
		cout<<" '"<<aRequest->String()<<"' values: " 
			<<valueSet->GetEntriesFast()<<endl;

		TIter valIter(valueSet);
		AliDCSValue* aValue;
		while ((aValue = (AliDCSValue*) valIter.Next())) {
			cout<<aValue->ToString()<<endl;
		} 
	}

/*	TFile file("dump.root", "UPDATE");
	file.WriteTObject(values, "values");
	file.Close(); */

	values.DeleteAll();
	delete requests;

	cout<<"All values returned in runrange:  "<<endl;
	cout<<"StartTime: "<<TTimeStamp(startTime).AsString()<<endl;
	cout<<"EndTime: "<<TTimeStamp(endTime).AsString()<<endl;
}

void TestClient(const char* host, Int_t port, const char* request,
	UInt_t startShift, UInt_t endShift) {

	gSystem->Load("$ALICE_ROOT/SHUTTLE/DCSClient/AliDCSClient");

//	AliLog::EnableDebug(kFALSE);
//	AliLog::SetGlobalDebugLevel(3);

	TTimeStamp currentTime;

	GetValues(host, port, request,
		currentTime.GetSec() - startShift, 
		currentTime.GetSec() - endShift);

	cout<<"Client done"<<endl;
}
 TestClient.C:1
 TestClient.C:2
 TestClient.C:3
 TestClient.C:4
 TestClient.C:5
 TestClient.C:6
 TestClient.C:7
 TestClient.C:8
 TestClient.C:9
 TestClient.C:10
 TestClient.C:11
 TestClient.C:12
 TestClient.C:13
 TestClient.C:14
 TestClient.C:15
 TestClient.C:16
 TestClient.C:17
 TestClient.C:18
 TestClient.C:19
 TestClient.C:20
 TestClient.C:21
 TestClient.C:22
 TestClient.C:23
 TestClient.C:24
 TestClient.C:25
 TestClient.C:26
 TestClient.C:27
 TestClient.C:28
 TestClient.C:29
 TestClient.C:30
 TestClient.C:31
 TestClient.C:32
 TestClient.C:33
 TestClient.C:34
 TestClient.C:35
 TestClient.C:36
 TestClient.C:37
 TestClient.C:38
 TestClient.C:39
 TestClient.C:40
 TestClient.C:41
 TestClient.C:42
 TestClient.C:43
 TestClient.C:44
 TestClient.C:45
 TestClient.C:46
 TestClient.C:47
 TestClient.C:48
 TestClient.C:49
 TestClient.C:50
 TestClient.C:51
 TestClient.C:52
 TestClient.C:53
 TestClient.C:54
 TestClient.C:55
 TestClient.C:56
 TestClient.C:57
 TestClient.C:58
 TestClient.C:59
 TestClient.C:60
 TestClient.C:61
 TestClient.C:62
 TestClient.C:63
 TestClient.C:64
 TestClient.C:65
 TestClient.C:66
 TestClient.C:67
 TestClient.C:68
 TestClient.C:69
 TestClient.C:70
 TestClient.C:71
 TestClient.C:72
 TestClient.C:73
 TestClient.C:74
 TestClient.C:75
 TestClient.C:76
 TestClient.C:77
 TestClient.C:78
 TestClient.C:79
 TestClient.C:80
 TestClient.C:81
 TestClient.C:82
 TestClient.C:83
 TestClient.C:84
 TestClient.C:85
 TestClient.C:86
 TestClient.C:87
 TestClient.C:88
 TestClient.C:89
 TestClient.C:90
 TestClient.C:91
 TestClient.C:92
 TestClient.C:93
 TestClient.C:94
 TestClient.C:95
 TestClient.C:96
 TestClient.C:97
 TestClient.C:98
 TestClient.C:99
 TestClient.C:100
 TestClient.C:101
 TestClient.C:102
 TestClient.C:103