#include "honlineclientservercom.h"
#include "TThread.h"
#include "TStopwatch.h"
#include "hades.h"
#include "hdatasource.h"
#include <iostream>
#include <vector>
using namespace std;
ClassImp(HOnlineClientServerCom);
Int_t   HOnlineClientServerCom::fEvtCtInterval = 100;
Float_t HOnlineClientServerCom::fSpeed         = 0;
Bool_t  HOnlineClientServerCom::isInit         = kFALSE;
Bool_t  HOnlineClientServerCom::doStop         = kFALSE;
HOnlineClientServerCom::HOnlineClientServerCom(TString name, TString hostname, Int_t port) {
    this->SetName(name);
    monitor = 0;
    serversocket = 0;
    fPort = port;
    fHostname = hostname;
    fTimeout = 1000;
    fDebug = kFALSE;
    fEvtCtInterval = 100;
    fSpeed         = 0;
    eventLoopThread = NULL;
    isInit = kFALSE;
    doStop = kFALSE;
    masterClient = NULL;
}
Bool_t HOnlineClientServerCom::init() {
    serversocket = new TServerSocket(fPort, kFALSE);  
    if (!serversocket->IsValid()) {
	return kFALSE;
    }
    monitor = new TMonitor;
    monitor->Add(serversocket);
    return kTRUE;
}
HOnlineClientServerCom::~HOnlineClientServerCom()
{
    
    
    TThread* self = TThread::Self();
    self->Lock();
    serversocket->Close();
    delete monitor;
    socketlist.Delete();
    delete serversocket;
    serversocket = 0;
    monitor = 0;
    TThread::Delete(eventLoopThread);
    delete eventLoopThread;
    self->UnLock();
}
Bool_t HOnlineClientServerCom::sendListToClient(TSocket* socket, TList* list)
{
    if (!socket->IsValid()) return kFALSE;
    TMessage answer(kMESS_OBJECT);
    answer.WriteObject(list);
    if (socket->Send(answer) <= 0) return kFALSE;
    return kTRUE;
}
Bool_t HOnlineClientServerCom::sendHistToClient(TSocket* socket, HOnlineMonHistAddon* hist) {
    if (!socket->IsValid()) return kFALSE;
    TMessage answer(kMESS_OBJECT);
    answer.WriteObject(hist);
    if (socket->Send(answer) <= 0) return kFALSE;
    return kTRUE;
}
Bool_t HOnlineClientServerCom::sendTextToClient(TSocket* socket, TString msg) {
    if (!socket->IsValid()) return kFALSE;
    TMessage answer(kMESS_STRING);
    answer.WriteTString(msg);
    if (socket->Send(answer) <= 0) return kFALSE;
    return kTRUE;
}
Bool_t HOnlineClientServerCom::processClientRequests()
{
    
    TList* wr = new TList();  
    TList* rr = new TList();  
    
    Int_t numSockets = monitor->Select(rr, wr, fTimeout);
    if(fDebug) TThread::Printf("HOnlineClientServerCom:: number of sockets waiting: %d", numSockets);
    if (numSockets == 0) {
	
	return kFALSE;
    }
    
    for(Int_t i=0;i<rr->LastIndex()+1;i++) {
	
	TSocket* s = (TSocket*) rr->At(i);
	if(s->IsA() == TServerSocket::Class()) {
	    
	    TSocket *sock = ((TServerSocket*)s)->Accept();
	    monitor->Add(sock); 
	    socketlist.Add(sock); 
	    TThread::Printf("HOnlineClientServerCom:: connection from client %s accepted",(sock->GetInetAddress()).GetHostName());
            if(!masterClient) masterClient = sock;
	} else {
	    TMessage* mess = 0;
	    Int_t rcode = s->Recv(mess);
	    if (rcode <= 0) {
		
		TString client = (s->GetInetAddress()).GetHostName();
		monitor->Remove(s);
		socketlist.Remove(s);
		s->Close();
		delete s;
		s = 0;
		delete mess;
		mess = 0;
		TThread::Printf("HOnlineClientServerCom:: connection from client %s closed",client.Data());
	    } else {
		
		if (mess->What() == kMESS_STRING) {
		    TString str;
		    mess->ReadTString(str);
		    TObjString* objstr = new TObjString();
		    objstr->SetString(str);
		    clientRequests.Add(objstr, s);
		}
		delete mess;
		mess = 0;
	    }
	}
    }
    delete wr;
    delete rr;
    return kTRUE;
}
Int_t HOnlineClientServerCom::processClients(TList& histpool) {
    
    
    
    
    
    
    
    while(isInit == kFALSE) {
	TThread::Printf("HOnlineClientServerCom:: Waiting for first eventLoop ...");
	TThread::Sleep(1);
    }
    while(1)
    {
	if (processClientRequests())
	{
	    TIterator* myiter = clientRequests.MakeIterator();
	    TObjString* mapkey;
	    TString histname2send;
	    TSocket* socket;
	    HOnlineMonHistAddon* hist2send;
	    
            
	    while ((mapkey=(TObjString*)myiter->Next()) != 0)
	    {
		socket = (TSocket*) clientRequests.GetValue(mapkey);
		TString recvstring = mapkey->GetString();
		if(recvstring.BeginsWith("CMD "))
		{
		    
		    
		    
		    
                    if (recvstring.CompareTo("CMD speed") == 0) {
			sendTextToClient(socket,Form("%5.2f evts/s",fSpeed));
		    }
		    
		    
                    if (recvstring.CompareTo("CMD filename") == 0) {
                        TString filename = "no file yet";
			HDataSource* source = gHades->getDataSource();
			if(source){
			    filename = gHades->getDataSource()->getCurrentFileName();
			}
			sendTextToClient(socket,filename);
		    }
		    
		    
		    if (recvstring.CompareTo("CMD ismaster") == 0) {
			TThread::Printf("HOnlineClientServerCom:: received command '%s' from host '%s'", recvstring.Data(), (socket->GetInetAddress()).GetHostName());
			TString message = "no";
			if(socket == masterClient ) {
			    message = "yes";
			    TThread::Printf("HOnlineClientServerCom:: This client is considered as Master client");
			} else {
                           TThread::Printf("HOnlineClientServerCom:: This client is considered as Slave client");
			}
			sendTextToClient(socket,message);
		    }
		    
		    
                    if (recvstring.CompareTo("CMD setmaster") == 0) {
			TThread::Printf("HOnlineClientServerCom:: received command '%s' from host '%s'", recvstring.Data(), (socket->GetInetAddress()).GetHostName());
                        TThread::Printf("HOnlineClientServerCom:: This client is set as Master client");
			masterClient = socket;
			TString message = "ok";
			sendTextToClient(socket,message);
		    }
		    
		    
		    if (recvstring.CompareTo("CMD histlist") == 0) {
			
			TList* listhistname = new TList();
			for(Int_t i=0;i<histpool.LastIndex()+1;i++) {
			    TString tmpname = ((HOnlineMonHistAddon*)histpool.At(i))->GetName();
			    TObjString* tmpobj = new TObjString();
			    tmpobj->SetString(tmpname);
			    listhistname->Add(tmpobj);
			}
			if (!sendListToClient(socket, listhistname)) {
			    TThread::Printf("HOnlineClientServerCom:: Error: could not send list of histogram names to client");
			}
			listhistname->Delete();
			listhistname = 0;
		    }
		    
		    
		    if (recvstring.CompareTo("CMD stop") == 0) {
			
			TThread::Printf("HOnlineClientServerCom:: received command '%s' from host '%s'", recvstring.Data(), (socket->GetInetAddress()).GetHostName());
			if(masterClient!=socket){
 
			    TThread::Printf("HOnlineClientServerCom:: THIS CLIENT IS NOT THE MASTER! WILL BE IGNORED!");
			    sendTextToClient(socket,"IGNORED");
			} else {
			    
			    TThread::Printf("HOnlineClientServerCom:: stopping server... Received command 'stop' from host '%s'", (socket->GetInetAddress()).GetHostName());
			    
			    doStop = kTRUE;
			    Int_t ct = 0;
			    TThread::EState state = eventLoopThread->GetState();
			    while(state != TThread::kCanceledState && ct < 10) {
				ct++;
				TThread::Printf("HOnlineClientServerCom:: Waiting for eventLoop to finish .... n time %i",ct);
				state = eventLoopThread->GetState();
				TThread::Sleep(1);
			    }
			    if(ct == 10) {
				TThread::Printf("HOnlineClientServerCom:: EventLoop seems to be hanging .... finishing anyway.");
			    }
			    TThread::Ps();
			    return -1;
			}
		    }
		    
		    
		    if (recvstring.CompareTo("CMD resetall") == 0) {
			TThread::Printf("HOnlineClientServerCom:: reset all histograms ... Received command 'resetall' from host '%s'", (socket->GetInetAddress()).GetHostName());
			if(masterClient!=socket){
 
			    TThread::Printf("HOnlineClientServerCom:: THIS CLIENT IS NOT THE MASTER! WILL BE IGNORED!");
			    sendTextToClient(socket,"IGNORED");
			} else {
			    
			    TThread* self = TThread::Self();
			    self->Lock();
			    HOnlineMonHistAddon* addon;
			    TIterator* it  = histpool.MakeIterator();
			    while( ((addon = (HOnlineMonHistAddon*) it->Next()) != 0) ) {
				if(addon->getActive() != 0) addon->reset(0,0); 
			    }
			    delete it;
			    sendTextToClient(socket,"resetdone");
			    self->UnLock();
			}
		    }
		    delete (TObjString*) (clientRequests.Remove(mapkey));
		}
	    }
	    
	    
            
	    myiter->Reset();
 	    while ((mapkey=(TObjString*)myiter->Next()) != 0)
	    {
		socket = (TSocket*) clientRequests.GetValue(mapkey);
		TString recvstring = mapkey->GetString();
		if(recvstring.BeginsWith("CMD ")) {
                   
		} else {
		    
		    
		    
		    
		    TString histname2send = recvstring;
		    hist2send = (HOnlineMonHistAddon*) histpool.FindObject(histname2send.Data());
		    if (hist2send == 0) {
			TString errmsg = "ERROR: Can't find requested histogram '";
			errmsg += histname2send;
			errmsg += "' in list of active histograms.";
			TThread::Printf("HOnlineClientServerCom:: %s",errmsg.Data());
			if (!sendTextToClient(socket, errmsg)) {
			    
			    TThread::Printf("HOnlineClientServerCom:: ERROR: could not send text %s to client %s '",errmsg.Data(),(socket->GetInetAddress()).GetHostName());
			}
			delete (TObjString*) (clientRequests.Remove(mapkey));
		    } else {
			if (!sendHistToClient(socket, hist2send)) {
			    
			    TThread::Printf("HOnlineClientServerCom:: ERROR: could not send histogram %s to client %s",hist2send->GetName(),(socket->GetInetAddress()).GetHostName());
			}
			delete (TObjString*) (clientRequests.Remove(mapkey));
		    }
		}
	    } 
	    
	    delete myiter;
	} 
	
    } 
    return 0;
}
void* HOnlineClientServerCom::ThreadEventLoop(void* arg) {
    
    
    
    
    
    
    vector < fillptrHOnlineClientServerCom >& fillfunctions = *((vector < fillptrHOnlineClientServerCom >*) arg);
    Int_t count = 0;
    Bool_t rc = 0;
    TStopwatch timer;
    timer.Start();
    while(rc == 0 && !doStop) {
	
	if(!gHades->eventLoop(1)) {
	    TThread::Printf("HOnlineClientServerCom:: Reached last Event!");
	    rc = -1 ; continue ;
	}
	count++;
	if(count%100 == 0){
           Float_t time = timer.RealTime();
	   if(time > 0.0001) fSpeed = 100./time;
           else              fSpeed = 0;
	   timer.Reset();
	   timer.Start();
	}
        if(count>=1) isInit = kTRUE;
	if(fEvtCtInterval!=-1 && count%fEvtCtInterval == 0 ){ TThread::Printf("Event %i",count);}
	
	
	for(UInt_t i = 0; i < fillfunctions.size(); i++){ 
	    fillptrHOnlineClientServerCom func = fillfunctions[i];
	    (*func)(count);
	}
	
	
    }
    TThread::Printf("HOnlineClientServerCom:: eventLoopThread finsihed!");
    return 0;
}
void HOnlineClientServerCom::eventLoop(vector < fillptrHOnlineClientServerCom >*  fillfunctions)
{
    
    
    
     
    if (!eventLoopThread) {
        eventLoopThread = new TThread("eventloopThread", ( void(*) (void*) )&ThreadEventLoop, (void*) fillfunctions);
        eventLoopThread->Run();
        TThread::Ps();
    }
}
 honlineclientservercom.cc:1  honlineclientservercom.cc:2  honlineclientservercom.cc:3  honlineclientservercom.cc:4  honlineclientservercom.cc:5  honlineclientservercom.cc:6  honlineclientservercom.cc:7  honlineclientservercom.cc:8  honlineclientservercom.cc:9  honlineclientservercom.cc:10  honlineclientservercom.cc:11  honlineclientservercom.cc:12  honlineclientservercom.cc:13  honlineclientservercom.cc:14  honlineclientservercom.cc:15  honlineclientservercom.cc:16  honlineclientservercom.cc:17  honlineclientservercom.cc:18  honlineclientservercom.cc:19  honlineclientservercom.cc:20  honlineclientservercom.cc:21  honlineclientservercom.cc:22  honlineclientservercom.cc:23  honlineclientservercom.cc:24  honlineclientservercom.cc:25  honlineclientservercom.cc:26  honlineclientservercom.cc:27  honlineclientservercom.cc:28  honlineclientservercom.cc:29  honlineclientservercom.cc:30  honlineclientservercom.cc:31  honlineclientservercom.cc:32  honlineclientservercom.cc:33  honlineclientservercom.cc:34  honlineclientservercom.cc:35  honlineclientservercom.cc:36  honlineclientservercom.cc:37  honlineclientservercom.cc:38  honlineclientservercom.cc:39  honlineclientservercom.cc:40  honlineclientservercom.cc:41  honlineclientservercom.cc:42  honlineclientservercom.cc:43  honlineclientservercom.cc:44  honlineclientservercom.cc:45  honlineclientservercom.cc:46  honlineclientservercom.cc:47  honlineclientservercom.cc:48  honlineclientservercom.cc:49  honlineclientservercom.cc:50  honlineclientservercom.cc:51  honlineclientservercom.cc:52  honlineclientservercom.cc:53  honlineclientservercom.cc:54  honlineclientservercom.cc:55  honlineclientservercom.cc:56  honlineclientservercom.cc:57  honlineclientservercom.cc:58  honlineclientservercom.cc:59  honlineclientservercom.cc:60  honlineclientservercom.cc:61  honlineclientservercom.cc:62  honlineclientservercom.cc:63  honlineclientservercom.cc:64  honlineclientservercom.cc:65  honlineclientservercom.cc:66  honlineclientservercom.cc:67  honlineclientservercom.cc:68  honlineclientservercom.cc:69  honlineclientservercom.cc:70  honlineclientservercom.cc:71  honlineclientservercom.cc:72  honlineclientservercom.cc:73  honlineclientservercom.cc:74  honlineclientservercom.cc:75  honlineclientservercom.cc:76  honlineclientservercom.cc:77  honlineclientservercom.cc:78  honlineclientservercom.cc:79  honlineclientservercom.cc:80  honlineclientservercom.cc:81  honlineclientservercom.cc:82  honlineclientservercom.cc:83  honlineclientservercom.cc:84  honlineclientservercom.cc:85  honlineclientservercom.cc:86  honlineclientservercom.cc:87  honlineclientservercom.cc:88  honlineclientservercom.cc:89  honlineclientservercom.cc:90  honlineclientservercom.cc:91  honlineclientservercom.cc:92  honlineclientservercom.cc:93  honlineclientservercom.cc:94  honlineclientservercom.cc:95  honlineclientservercom.cc:96  honlineclientservercom.cc:97  honlineclientservercom.cc:98  honlineclientservercom.cc:99  honlineclientservercom.cc:100  honlineclientservercom.cc:101  honlineclientservercom.cc:102  honlineclientservercom.cc:103  honlineclientservercom.cc:104  honlineclientservercom.cc:105  honlineclientservercom.cc:106  honlineclientservercom.cc:107  honlineclientservercom.cc:108  honlineclientservercom.cc:109  honlineclientservercom.cc:110  honlineclientservercom.cc:111  honlineclientservercom.cc:112  honlineclientservercom.cc:113  honlineclientservercom.cc:114  honlineclientservercom.cc:115  honlineclientservercom.cc:116  honlineclientservercom.cc:117  honlineclientservercom.cc:118  honlineclientservercom.cc:119  honlineclientservercom.cc:120  honlineclientservercom.cc:121  honlineclientservercom.cc:122  honlineclientservercom.cc:123  honlineclientservercom.cc:124  honlineclientservercom.cc:125  honlineclientservercom.cc:126  honlineclientservercom.cc:127  honlineclientservercom.cc:128  honlineclientservercom.cc:129  honlineclientservercom.cc:130  honlineclientservercom.cc:131  honlineclientservercom.cc:132  honlineclientservercom.cc:133  honlineclientservercom.cc:134  honlineclientservercom.cc:135  honlineclientservercom.cc:136  honlineclientservercom.cc:137  honlineclientservercom.cc:138  honlineclientservercom.cc:139  honlineclientservercom.cc:140  honlineclientservercom.cc:141  honlineclientservercom.cc:142  honlineclientservercom.cc:143  honlineclientservercom.cc:144  honlineclientservercom.cc:145  honlineclientservercom.cc:146  honlineclientservercom.cc:147  honlineclientservercom.cc:148  honlineclientservercom.cc:149  honlineclientservercom.cc:150  honlineclientservercom.cc:151  honlineclientservercom.cc:152  honlineclientservercom.cc:153  honlineclientservercom.cc:154  honlineclientservercom.cc:155  honlineclientservercom.cc:156  honlineclientservercom.cc:157  honlineclientservercom.cc:158  honlineclientservercom.cc:159  honlineclientservercom.cc:160  honlineclientservercom.cc:161  honlineclientservercom.cc:162  honlineclientservercom.cc:163  honlineclientservercom.cc:164  honlineclientservercom.cc:165  honlineclientservercom.cc:166  honlineclientservercom.cc:167  honlineclientservercom.cc:168  honlineclientservercom.cc:169  honlineclientservercom.cc:170  honlineclientservercom.cc:171  honlineclientservercom.cc:172  honlineclientservercom.cc:173  honlineclientservercom.cc:174  honlineclientservercom.cc:175  honlineclientservercom.cc:176  honlineclientservercom.cc:177  honlineclientservercom.cc:178  honlineclientservercom.cc:179  honlineclientservercom.cc:180  honlineclientservercom.cc:181  honlineclientservercom.cc:182  honlineclientservercom.cc:183  honlineclientservercom.cc:184  honlineclientservercom.cc:185  honlineclientservercom.cc:186  honlineclientservercom.cc:187  honlineclientservercom.cc:188  honlineclientservercom.cc:189  honlineclientservercom.cc:190  honlineclientservercom.cc:191  honlineclientservercom.cc:192  honlineclientservercom.cc:193  honlineclientservercom.cc:194  honlineclientservercom.cc:195  honlineclientservercom.cc:196  honlineclientservercom.cc:197  honlineclientservercom.cc:198  honlineclientservercom.cc:199  honlineclientservercom.cc:200  honlineclientservercom.cc:201  honlineclientservercom.cc:202  honlineclientservercom.cc:203  honlineclientservercom.cc:204  honlineclientservercom.cc:205  honlineclientservercom.cc:206  honlineclientservercom.cc:207  honlineclientservercom.cc:208  honlineclientservercom.cc:209  honlineclientservercom.cc:210  honlineclientservercom.cc:211  honlineclientservercom.cc:212  honlineclientservercom.cc:213  honlineclientservercom.cc:214  honlineclientservercom.cc:215  honlineclientservercom.cc:216  honlineclientservercom.cc:217  honlineclientservercom.cc:218  honlineclientservercom.cc:219  honlineclientservercom.cc:220  honlineclientservercom.cc:221  honlineclientservercom.cc:222  honlineclientservercom.cc:223  honlineclientservercom.cc:224  honlineclientservercom.cc:225  honlineclientservercom.cc:226  honlineclientservercom.cc:227  honlineclientservercom.cc:228  honlineclientservercom.cc:229  honlineclientservercom.cc:230  honlineclientservercom.cc:231  honlineclientservercom.cc:232  honlineclientservercom.cc:233  honlineclientservercom.cc:234  honlineclientservercom.cc:235  honlineclientservercom.cc:236  honlineclientservercom.cc:237  honlineclientservercom.cc:238  honlineclientservercom.cc:239  honlineclientservercom.cc:240  honlineclientservercom.cc:241  honlineclientservercom.cc:242  honlineclientservercom.cc:243  honlineclientservercom.cc:244  honlineclientservercom.cc:245  honlineclientservercom.cc:246  honlineclientservercom.cc:247  honlineclientservercom.cc:248  honlineclientservercom.cc:249  honlineclientservercom.cc:250  honlineclientservercom.cc:251  honlineclientservercom.cc:252  honlineclientservercom.cc:253  honlineclientservercom.cc:254  honlineclientservercom.cc:255  honlineclientservercom.cc:256  honlineclientservercom.cc:257  honlineclientservercom.cc:258  honlineclientservercom.cc:259  honlineclientservercom.cc:260  honlineclientservercom.cc:261  honlineclientservercom.cc:262  honlineclientservercom.cc:263  honlineclientservercom.cc:264  honlineclientservercom.cc:265  honlineclientservercom.cc:266  honlineclientservercom.cc:267  honlineclientservercom.cc:268  honlineclientservercom.cc:269  honlineclientservercom.cc:270  honlineclientservercom.cc:271  honlineclientservercom.cc:272  honlineclientservercom.cc:273  honlineclientservercom.cc:274  honlineclientservercom.cc:275  honlineclientservercom.cc:276  honlineclientservercom.cc:277  honlineclientservercom.cc:278  honlineclientservercom.cc:279  honlineclientservercom.cc:280  honlineclientservercom.cc:281  honlineclientservercom.cc:282  honlineclientservercom.cc:283  honlineclientservercom.cc:284  honlineclientservercom.cc:285  honlineclientservercom.cc:286  honlineclientservercom.cc:287  honlineclientservercom.cc:288  honlineclientservercom.cc:289  honlineclientservercom.cc:290  honlineclientservercom.cc:291  honlineclientservercom.cc:292  honlineclientservercom.cc:293  honlineclientservercom.cc:294  honlineclientservercom.cc:295  honlineclientservercom.cc:296  honlineclientservercom.cc:297  honlineclientservercom.cc:298  honlineclientservercom.cc:299  honlineclientservercom.cc:300  honlineclientservercom.cc:301  honlineclientservercom.cc:302  honlineclientservercom.cc:303  honlineclientservercom.cc:304  honlineclientservercom.cc:305  honlineclientservercom.cc:306  honlineclientservercom.cc:307  honlineclientservercom.cc:308  honlineclientservercom.cc:309  honlineclientservercom.cc:310  honlineclientservercom.cc:311  honlineclientservercom.cc:312  honlineclientservercom.cc:313  honlineclientservercom.cc:314  honlineclientservercom.cc:315  honlineclientservercom.cc:316  honlineclientservercom.cc:317  honlineclientservercom.cc:318  honlineclientservercom.cc:319  honlineclientservercom.cc:320  honlineclientservercom.cc:321  honlineclientservercom.cc:322  honlineclientservercom.cc:323  honlineclientservercom.cc:324  honlineclientservercom.cc:325  honlineclientservercom.cc:326  honlineclientservercom.cc:327  honlineclientservercom.cc:328  honlineclientservercom.cc:329  honlineclientservercom.cc:330  honlineclientservercom.cc:331  honlineclientservercom.cc:332  honlineclientservercom.cc:333  honlineclientservercom.cc:334  honlineclientservercom.cc:335  honlineclientservercom.cc:336  honlineclientservercom.cc:337  honlineclientservercom.cc:338  honlineclientservercom.cc:339  honlineclientservercom.cc:340  honlineclientservercom.cc:341  honlineclientservercom.cc:342  honlineclientservercom.cc:343  honlineclientservercom.cc:344  honlineclientservercom.cc:345  honlineclientservercom.cc:346  honlineclientservercom.cc:347  honlineclientservercom.cc:348  honlineclientservercom.cc:349  honlineclientservercom.cc:350  honlineclientservercom.cc:351  honlineclientservercom.cc:352  honlineclientservercom.cc:353  honlineclientservercom.cc:354  honlineclientservercom.cc:355  honlineclientservercom.cc:356  honlineclientservercom.cc:357  honlineclientservercom.cc:358  honlineclientservercom.cc:359  honlineclientservercom.cc:360  honlineclientservercom.cc:361  honlineclientservercom.cc:362  honlineclientservercom.cc:363  honlineclientservercom.cc:364  honlineclientservercom.cc:365  honlineclientservercom.cc:366  honlineclientservercom.cc:367  honlineclientservercom.cc:368  honlineclientservercom.cc:369  honlineclientservercom.cc:370  honlineclientservercom.cc:371  honlineclientservercom.cc:372  honlineclientservercom.cc:373  honlineclientservercom.cc:374  honlineclientservercom.cc:375  honlineclientservercom.cc:376  honlineclientservercom.cc:377  honlineclientservercom.cc:378  honlineclientservercom.cc:379  honlineclientservercom.cc:380  honlineclientservercom.cc:381  honlineclientservercom.cc:382  honlineclientservercom.cc:383  honlineclientservercom.cc:384  honlineclientservercom.cc:385  honlineclientservercom.cc:386  honlineclientservercom.cc:387  honlineclientservercom.cc:388  honlineclientservercom.cc:389  honlineclientservercom.cc:390  honlineclientservercom.cc:391  honlineclientservercom.cc:392  honlineclientservercom.cc:393  honlineclientservercom.cc:394  honlineclientservercom.cc:395  honlineclientservercom.cc:396  honlineclientservercom.cc:397  honlineclientservercom.cc:398  honlineclientservercom.cc:399  honlineclientservercom.cc:400  honlineclientservercom.cc:401  honlineclientservercom.cc:402  honlineclientservercom.cc:403  honlineclientservercom.cc:404  honlineclientservercom.cc:405  honlineclientservercom.cc:406  honlineclientservercom.cc:407  honlineclientservercom.cc:408  honlineclientservercom.cc:409  honlineclientservercom.cc:410  honlineclientservercom.cc:411  honlineclientservercom.cc:412  honlineclientservercom.cc:413  honlineclientservercom.cc:414  honlineclientservercom.cc:415  honlineclientservercom.cc:416  honlineclientservercom.cc:417  honlineclientservercom.cc:418  honlineclientservercom.cc:419  honlineclientservercom.cc:420  honlineclientservercom.cc:421  honlineclientservercom.cc:422  honlineclientservercom.cc:423  honlineclientservercom.cc:424  honlineclientservercom.cc:425  honlineclientservercom.cc:426  honlineclientservercom.cc:427  honlineclientservercom.cc:428  honlineclientservercom.cc:429  honlineclientservercom.cc:430  honlineclientservercom.cc:431  honlineclientservercom.cc:432  honlineclientservercom.cc:433  honlineclientservercom.cc:434  honlineclientservercom.cc:435  honlineclientservercom.cc:436  honlineclientservercom.cc:437  honlineclientservercom.cc:438  honlineclientservercom.cc:439  honlineclientservercom.cc:440  honlineclientservercom.cc:441  honlineclientservercom.cc:442  honlineclientservercom.cc:443  honlineclientservercom.cc:444  honlineclientservercom.cc:445  honlineclientservercom.cc:446  honlineclientservercom.cc:447  honlineclientservercom.cc:448  honlineclientservercom.cc:449  honlineclientservercom.cc:450  honlineclientservercom.cc:451  honlineclientservercom.cc:452  honlineclientservercom.cc:453  honlineclientservercom.cc:454  honlineclientservercom.cc:455  honlineclientservercom.cc:456  honlineclientservercom.cc:457  honlineclientservercom.cc:458