cdev-1.7.2n
This commit is contained in:
548
extensions/cdevGenericServer/NameServer/java/rsvcEvent.java
Normal file
548
extensions/cdevGenericServer/NameServer/java/rsvcEvent.java
Normal file
@@ -0,0 +1,548 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
|
||||
// Continuous Electron Beam Accelerator Facility
|
||||
//
|
||||
// This software was developed under a United States Government license
|
||||
// described in the NOTICE file included as part of this distribution.
|
||||
//
|
||||
// Jefferson Lab HPC Group, 12000 Jefferson Ave., Newport News, VA 23606
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Description:
|
||||
// RSVC Server/Client Protocol Information and Data Information
|
||||
// This class contains protocol information related to callbacks
|
||||
// 1. operation code
|
||||
// 2. request id
|
||||
// 3. socket id -->for server only
|
||||
// 4. client id
|
||||
// 5. callback id -->from client to server
|
||||
//
|
||||
//
|
||||
// Author:
|
||||
// Jie Chen
|
||||
// Jefferson Lab HPC Group
|
||||
//
|
||||
// Revision History:
|
||||
// $Log: rsvcEvent.java,v $
|
||||
// Revision 1.1.1.1 2000/05/23 15:12:50 pal
|
||||
// cdev_psi_1.7.2
|
||||
//
|
||||
// Revision 1.1 1999/10/18 17:12:42 chen
|
||||
// *** empty log message ***
|
||||
//
|
||||
//
|
||||
//
|
||||
import java.io.*;
|
||||
import rsvcConfig;
|
||||
import rsvcData;
|
||||
import rsvcEventHandler;
|
||||
|
||||
public final class rsvcEvent
|
||||
{
|
||||
private int opcode_;
|
||||
private int cbkid_;
|
||||
private int eventid_;
|
||||
private int clientid_;
|
||||
private int socketid_;
|
||||
private int status_;
|
||||
private rsvcData data_;
|
||||
private rsvcEventHandler handler_ = null;
|
||||
|
||||
/**
|
||||
* Construct an emtpy rsvcEvent object
|
||||
*/
|
||||
public rsvcEvent ()
|
||||
{
|
||||
opcode_ = rsvcConfig.RSVC_OP_UNKNOWN;
|
||||
cbkid_ = 0;
|
||||
eventid_ = 0;
|
||||
clientid_ = 0;
|
||||
socketid_ = 0;
|
||||
status_ = rsvcConfig.RSVC_SUCCESS;
|
||||
data_ = new rsvcData ();
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a rsvcEvent Object with given parameters
|
||||
*/
|
||||
public rsvcEvent (rsvcData data, int opcode, int cbkid)
|
||||
|
||||
{
|
||||
data_ = new rsvcData (data);
|
||||
opcode_ = opcode;
|
||||
cbkid_ = cbkid;
|
||||
eventid_ = 0;
|
||||
clientid_ = 0;
|
||||
socketid_ = 0;
|
||||
status_ = rsvcConfig.RSVC_SUCCESS;
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a rsvcEvent Object with given parameters
|
||||
*/
|
||||
public rsvcEvent (rsvcData data, int opcode, int cbkid,
|
||||
int eventid, int clientid, int socketid,
|
||||
int status)
|
||||
{
|
||||
data_ = new rsvcData (data);
|
||||
opcode_ = opcode;
|
||||
cbkid_ = cbkid;
|
||||
eventid_ = eventid;
|
||||
clientid_ = clientid;
|
||||
socketid_ = socketid;
|
||||
status_ = status;
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a rsvcEvent Object without data object
|
||||
*/
|
||||
public rsvcEvent (int opcode, int cbkid,
|
||||
int eventid, int clientid, int socketid,
|
||||
int status)
|
||||
{
|
||||
data_ = new rsvcData();
|
||||
opcode_ = opcode;
|
||||
cbkid_ = cbkid;
|
||||
eventid_ = eventid;
|
||||
clientid_ = clientid;
|
||||
socketid_ = socketid;
|
||||
status_ = status;
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construct a rsvcEvent Object with data object only
|
||||
*/
|
||||
public rsvcEvent (rsvcData data)
|
||||
{
|
||||
data_ = new rsvcData(data);
|
||||
opcode_ = 0;
|
||||
cbkid_ = 0;
|
||||
eventid_ = 0;
|
||||
clientid_ = 0;
|
||||
socketid_ = 0;
|
||||
status_ = rsvcConfig.RSVC_SUCCESS;
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a rsvcEvent Object using an exising rsvcEvent
|
||||
*/
|
||||
public rsvcEvent (rsvcEvent event)
|
||||
{
|
||||
data_ = new rsvcData (event.data_);
|
||||
opcode_ = event.opcode_;
|
||||
cbkid_ = event.cbkid_;
|
||||
eventid_ = event.eventid_;
|
||||
clientid_ = event.clientid_;
|
||||
socketid_ = event.socketid_;
|
||||
status_ = event.status_;
|
||||
handler_ = event.handler_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether two events have the same signature
|
||||
*/
|
||||
public boolean match (rsvcEvent event)
|
||||
{
|
||||
if (opcode_ == event.opcode_ &&
|
||||
cbkid_ == event.cbkid_ &&
|
||||
eventid_ == event.eventid_)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data and other paremeters
|
||||
*/
|
||||
public void set (rsvcData data,
|
||||
int opcode, int cbkid,
|
||||
int eventid, int clientid,
|
||||
int socketid, int status)
|
||||
{
|
||||
data_ = new rsvcData (data);
|
||||
opcode_ = opcode;
|
||||
cbkid_ = cbkid;
|
||||
eventid_ = eventid;
|
||||
clientid_ = clientid;
|
||||
socketid_ = socketid;
|
||||
status_ = status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data and other paremeters
|
||||
*/
|
||||
public void set (int opcode, int cbkid,
|
||||
int eventid, int clientid,
|
||||
int socketid, int status)
|
||||
{
|
||||
opcode_ = opcode;
|
||||
cbkid_ = cbkid;
|
||||
eventid_ = eventid;
|
||||
clientid_ = clientid;
|
||||
socketid_ = socketid;
|
||||
status_ = status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up everything
|
||||
*/
|
||||
public void cleanup ()
|
||||
{
|
||||
data_.remove ();
|
||||
cbkid_ = 0;
|
||||
eventid_ = 0;
|
||||
clientid_ = 0;
|
||||
socketid_ = 0;
|
||||
status_ = rsvcConfig.RSVC_SUCCESS;
|
||||
handler_ = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Opcode of this event
|
||||
*/
|
||||
public int getOpcode ()
|
||||
{
|
||||
return opcode_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set opcode of this event
|
||||
*/
|
||||
public void setOpcode (int opcode)
|
||||
{
|
||||
opcode_ = opcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get request id
|
||||
*/
|
||||
public int getEventid ()
|
||||
{
|
||||
return eventid_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set request id
|
||||
*/
|
||||
public void setEventid (int eventid)
|
||||
{
|
||||
eventid_ = eventid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get client id
|
||||
*/
|
||||
public int getClientid ()
|
||||
{
|
||||
return clientid_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set client id
|
||||
*/
|
||||
public void setClientid (int clientid)
|
||||
{
|
||||
clientid_ = clientid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cbk id
|
||||
*/
|
||||
public int getCbkid ()
|
||||
{
|
||||
return cbkid_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set cbk id
|
||||
*/
|
||||
public void setCbkid (int cbkid)
|
||||
{
|
||||
cbkid_ = cbkid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get socket id
|
||||
*/
|
||||
public int getSocketid ()
|
||||
{
|
||||
return socketid_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set socket id
|
||||
*/
|
||||
public void setSocketid (int socketid)
|
||||
{
|
||||
socketid_ = socketid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Status of event
|
||||
*/
|
||||
public int getStatus ()
|
||||
{
|
||||
return status_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Status Field
|
||||
*/
|
||||
public void setStatus (int status)
|
||||
{
|
||||
status_ = status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Data Field
|
||||
*/
|
||||
public rsvcData getData ()
|
||||
{
|
||||
return data_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Data Field
|
||||
*/
|
||||
public void setData (rsvcData data)
|
||||
{
|
||||
data_ = new rsvcData (data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Handler field
|
||||
*/
|
||||
public void setHandler (rsvcEventHandler handler)
|
||||
{
|
||||
handler_ = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get handler field
|
||||
*/
|
||||
public rsvcEventHandler getHandler () throws NullPointerException
|
||||
{
|
||||
if (handler_ == null) {
|
||||
throw new NullPointerException ("rsvcEvent has a null handler");
|
||||
}
|
||||
return handler_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return binary data stream size for this event
|
||||
*/
|
||||
public int streamSize ()
|
||||
{
|
||||
int dsize = 0;
|
||||
int size = 0;
|
||||
|
||||
// magic number first
|
||||
dsize += rsvcDataOutputStream.streamSize (rsvcData._RSVC_MAGIC_NUM);
|
||||
|
||||
// size of the data to follow after this
|
||||
dsize += rsvcDataOutputStream.streamSize (size);
|
||||
|
||||
// size of 6 integer fields
|
||||
dsize += 6*rsvcDataOutputStream.streamSize ((int)0);
|
||||
|
||||
dsize += data_.streamSize ();
|
||||
|
||||
return dsize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert object into a binary data stream
|
||||
*/
|
||||
public void streamOut (OutputStream output) throws IOException
|
||||
{
|
||||
// calculate total size of this binary stream
|
||||
int binarysize = streamSize ();
|
||||
|
||||
// payload size without magic number and size information
|
||||
int rsize = binarysize -
|
||||
rsvcDataOutputStream.streamSize (rsvcData._RSVC_MAGIC_NUM) -
|
||||
rsvcDataOutputStream.streamSize (binarysize);
|
||||
|
||||
rsvcDataOutputStream writer = new rsvcDataOutputStream (output);
|
||||
|
||||
// write out magic number first
|
||||
try{
|
||||
writer.write (rsvcData._RSVC_MAGIC_NUM);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (rsize);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// write out six integer field
|
||||
try {
|
||||
writer.write (opcode_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (cbkid_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (eventid_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (clientid_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (socketid_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
writer.write (status_);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
// finally data item itself
|
||||
try {
|
||||
data_.streamOut (writer);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read header information of an incoming stream to find out
|
||||
* size information of data stream n
|
||||
*/
|
||||
public static int readHeader (InputStream stream) throws IOException
|
||||
{
|
||||
// attach input stream
|
||||
rsvcDataInputStream input = new rsvcDataInputStream (stream);
|
||||
|
||||
// read magic number first
|
||||
int magic;
|
||||
try {
|
||||
magic = input.readInt ();
|
||||
}catch (IOException e){
|
||||
throw e;
|
||||
}
|
||||
|
||||
if (magic != rsvcData._RSVC_MAGIC_NUM) {
|
||||
throw new IOException ("Magic number mismatch");
|
||||
}
|
||||
|
||||
// get data size
|
||||
int datasize;
|
||||
try {
|
||||
datasize = input.readInt ();
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
return datasize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return streamed event header length
|
||||
*/
|
||||
public static int headerLen ()
|
||||
{
|
||||
return rsvcDataOutputStream.streamSize (rsvcData._RSVC_MAGIC_NUM) +
|
||||
rsvcDataOutputStream.streamSize ((int)1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a stream into an event object
|
||||
*/
|
||||
public void streamIn (InputStream stream) throws IOException
|
||||
{
|
||||
// clean up this object
|
||||
cleanup ();
|
||||
|
||||
// attach input stream
|
||||
rsvcDataInputStream input = new rsvcDataInputStream (stream);
|
||||
|
||||
try {
|
||||
opcode_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
cbkid_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
eventid_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
clientid_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
socketid_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
status_ = input.readInt ();
|
||||
} catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
data_.streamIn (input);
|
||||
}catch (IOException e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public String toString ()
|
||||
{
|
||||
StringBuffer result = new StringBuffer ();
|
||||
|
||||
result.append ("Event Contains \n");
|
||||
result.append ("opcode: ").append (opcode_).append ("\n");
|
||||
result.append ("cbkid: ").append (cbkid_).append ("\n");
|
||||
result.append ("eventid: ").append (eventid_).append ("\n");
|
||||
result.append ("clientid: ").append (clientid_).append ("\n");
|
||||
result.append ("socketid: ").append (socketid_).append ("\n");
|
||||
result.append ("status: ").append (status_).append ("\n");
|
||||
result.append (data_.toString());
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user