ROOT logo
#ifndef __TMrbC2Lynx_h__
#define __TMrbC2Lynx_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           c2lynx/inc/TMrbC2Lynx.h
// Purpose:        Connect to LynxOs/VME via tcp socket
// Class:          TMrbC2Lynx            -- base class
// Description:    Class definitions to establish an
//                 client/server connection to LynxOs.
// Author:         R. Lutter
// Revision:       $Id: TMrbC2Lynx.h,v 1.17 2010-04-20 10:19:43 Rudolf.Lutter Exp $
// Date:           $Date: 2010-04-20 10:19:43 $
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TSystem.h"
#include "TString.h"
#include "TNamed.h"

#include "TServerSocket.h"
#include "TSocket.h"
#include "TMessage.h"

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"

#include "TC2LVMEModule.h"

#include "M2L_MessageTypes.h"
#include "M2L_CommonStructs.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbC2Lynx
// Purpose:        MARaBOU client to connect to LynxOs/VME.
// Description:    Creates a MARaBOU client to connect to LynxOs.
// Keywords:
//////////////////////////////////////////////////////////////////////////////

class TMrbC2Lynx : public TNamed {

	public:
		enum EC2LServerLog	{	kC2LServerLogNone	=	0,
								kC2LServerLogCout,
								kC2LServerLogXterm
		};

	public:

		TMrbC2Lynx() { this->Reset(); };												// default ctor

		TMrbC2Lynx(const Char_t * HostName, const Char_t * Server = NULL, const Char_t * LogFile = NULL, Int_t Port = 9010,
						const Char_t * ServerLog = "cout", Bool_t ConnectFlag = kTRUE);		// ctor: connect to host

		~TMrbC2Lynx() {};							// default dtor

		Bool_t SetServerLog(const Char_t * Output);
		Bool_t SetServerLog(EC2LServerLog Output);
		inline void SetNonBlocking(Bool_t Flag = kFALSE) { fNonBlocking = Flag; };

		inline const Char_t * GetHost() { return(fHost.Data()); };
		inline const Char_t * GetServerName() { return(fServerName.Data()); };
		inline const Char_t * GetServerPath() { return(fServerPath.Data()); };
		inline const Char_t * GetLogFile() { return(fLogFile.Data()); };
		inline Int_t GetPort() { return(fPort); };

		inline TSocket * GetSocket() { return(fSocket); };

		inline Bool_t IsVerbose() { return(fVerboseMode); };
		inline Bool_t IsDebug() { return(fDebugMode); };

		inline Bool_t IsNonBlocking() { return(fNonBlocking); };

		inline Bool_t LogNone() { return(fServerLog->GetIndex() == kC2LServerLogNone); };
		inline Bool_t LogCout() { return(fServerLog->GetIndex() == kC2LServerLogCout); };
		inline Bool_t LogXterm() { return(fServerLog->GetIndex() == kC2LServerLogXterm); };
		inline TMrbNamedX * GetServerLog() { return(fServerLog); };

		inline Bool_t IsConnected() { return(fSocket != NULL); }

		Bool_t Connect(Bool_t WaitFlag = kTRUE);
		Bool_t WaitForConnection();

		Bool_t Send(M2L_MsgHdr * Hdr);
		Bool_t Recv(M2L_MsgHdr * Hdr);

		inline void AddModule(TMrbNamedX * Module) { fLofModules.AddLast(Module); };
		inline TMrbLofNamedX * LofModules() { return(&fLofModules); };
		inline TC2LVMEModule * FindModule(const Char_t * ModuleName) { return((TC2LVMEModule *) fLofModules.FindByName(ModuleName)); };

		inline UInt_t What(M2L_MsgHdr * Hdr) { return(Hdr->fWhat); };
		inline Int_t Length(M2L_MsgHdr * Hdr) { return(Hdr->fLength); };

		void InitMessage(M2L_MsgHdr * Hdr, Int_t Length, UInt_t What);
		M2L_MsgHdr * AllocMessage(Int_t Length, Int_t Wc, UInt_t What);

		void Bye();

		Bool_t CheckAccessToLynxOs(const Char_t * Host, const Char_t * ServerPath);
		Bool_t CheckVersion(TString & Cpu, TString & Lynx, const Char_t * Host = NULL, const Char_t * ServerPath = NULL);

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		void Reset(); 								// reset

	protected:
		Bool_t fVerboseMode;						// kTRUE if verbose mode on
		Bool_t fDebugMode;							// kTRUE if debug, includes verbose=on

		TMrbNamedX * fServerLog;					// where to output server messages
		Bool_t fNonBlocking;						// non-blocking mode
		Bool_t fUseXterm;							// kTRUE if server logs to be shown in a xterm window

		TString fHost;								// host name
		TString fServerPath;						// where to start server from
		TString fServerName;						// server program
		TString fLogFile;							// where to write log info
		TSocket * fSocket;							//! connection to server
		Int_t fPort;								// port number

		TMrbLofNamedX fLofServerLogs;				// list of server log modes
		TMrbLofNamedX fLofModules;					// list of vme/camac modules connected

	ClassDef(TMrbC2Lynx, 1)		// [Access to LynxOs] Establish connection to LynxOs/VME
};

#endif
 TMrbC2Lynx.h:1
 TMrbC2Lynx.h:2
 TMrbC2Lynx.h:3
 TMrbC2Lynx.h:4
 TMrbC2Lynx.h:5
 TMrbC2Lynx.h:6
 TMrbC2Lynx.h:7
 TMrbC2Lynx.h:8
 TMrbC2Lynx.h:9
 TMrbC2Lynx.h:10
 TMrbC2Lynx.h:11
 TMrbC2Lynx.h:12
 TMrbC2Lynx.h:13
 TMrbC2Lynx.h:14
 TMrbC2Lynx.h:15
 TMrbC2Lynx.h:16
 TMrbC2Lynx.h:17
 TMrbC2Lynx.h:18
 TMrbC2Lynx.h:19
 TMrbC2Lynx.h:20
 TMrbC2Lynx.h:21
 TMrbC2Lynx.h:22
 TMrbC2Lynx.h:23
 TMrbC2Lynx.h:24
 TMrbC2Lynx.h:25
 TMrbC2Lynx.h:26
 TMrbC2Lynx.h:27
 TMrbC2Lynx.h:28
 TMrbC2Lynx.h:29
 TMrbC2Lynx.h:30
 TMrbC2Lynx.h:31
 TMrbC2Lynx.h:32
 TMrbC2Lynx.h:33
 TMrbC2Lynx.h:34
 TMrbC2Lynx.h:35
 TMrbC2Lynx.h:36
 TMrbC2Lynx.h:37
 TMrbC2Lynx.h:38
 TMrbC2Lynx.h:39
 TMrbC2Lynx.h:40
 TMrbC2Lynx.h:41
 TMrbC2Lynx.h:42
 TMrbC2Lynx.h:43
 TMrbC2Lynx.h:44
 TMrbC2Lynx.h:45
 TMrbC2Lynx.h:46
 TMrbC2Lynx.h:47
 TMrbC2Lynx.h:48
 TMrbC2Lynx.h:49
 TMrbC2Lynx.h:50
 TMrbC2Lynx.h:51
 TMrbC2Lynx.h:52
 TMrbC2Lynx.h:53
 TMrbC2Lynx.h:54
 TMrbC2Lynx.h:55
 TMrbC2Lynx.h:56
 TMrbC2Lynx.h:57
 TMrbC2Lynx.h:58
 TMrbC2Lynx.h:59
 TMrbC2Lynx.h:60
 TMrbC2Lynx.h:61
 TMrbC2Lynx.h:62
 TMrbC2Lynx.h:63
 TMrbC2Lynx.h:64
 TMrbC2Lynx.h:65
 TMrbC2Lynx.h:66
 TMrbC2Lynx.h:67
 TMrbC2Lynx.h:68
 TMrbC2Lynx.h:69
 TMrbC2Lynx.h:70
 TMrbC2Lynx.h:71
 TMrbC2Lynx.h:72
 TMrbC2Lynx.h:73
 TMrbC2Lynx.h:74
 TMrbC2Lynx.h:75
 TMrbC2Lynx.h:76
 TMrbC2Lynx.h:77
 TMrbC2Lynx.h:78
 TMrbC2Lynx.h:79
 TMrbC2Lynx.h:80
 TMrbC2Lynx.h:81
 TMrbC2Lynx.h:82
 TMrbC2Lynx.h:83
 TMrbC2Lynx.h:84
 TMrbC2Lynx.h:85
 TMrbC2Lynx.h:86
 TMrbC2Lynx.h:87
 TMrbC2Lynx.h:88
 TMrbC2Lynx.h:89
 TMrbC2Lynx.h:90
 TMrbC2Lynx.h:91
 TMrbC2Lynx.h:92
 TMrbC2Lynx.h:93
 TMrbC2Lynx.h:94
 TMrbC2Lynx.h:95
 TMrbC2Lynx.h:96
 TMrbC2Lynx.h:97
 TMrbC2Lynx.h:98
 TMrbC2Lynx.h:99
 TMrbC2Lynx.h:100
 TMrbC2Lynx.h:101
 TMrbC2Lynx.h:102
 TMrbC2Lynx.h:103
 TMrbC2Lynx.h:104
 TMrbC2Lynx.h:105
 TMrbC2Lynx.h:106
 TMrbC2Lynx.h:107
 TMrbC2Lynx.h:108
 TMrbC2Lynx.h:109
 TMrbC2Lynx.h:110
 TMrbC2Lynx.h:111
 TMrbC2Lynx.h:112
 TMrbC2Lynx.h:113
 TMrbC2Lynx.h:114
 TMrbC2Lynx.h:115
 TMrbC2Lynx.h:116
 TMrbC2Lynx.h:117
 TMrbC2Lynx.h:118
 TMrbC2Lynx.h:119
 TMrbC2Lynx.h:120
 TMrbC2Lynx.h:121
 TMrbC2Lynx.h:122
 TMrbC2Lynx.h:123
 TMrbC2Lynx.h:124
 TMrbC2Lynx.h:125
 TMrbC2Lynx.h:126
 TMrbC2Lynx.h:127
 TMrbC2Lynx.h:128
 TMrbC2Lynx.h:129