Code Search for Developers
 
 
  

AgentService.java from GridBlocks at Krugle


Show AgentService.java syntax highlighted

/*
 * Copyright (c) 2005 
 * Helsinki Institute of Physics
 * see LICENSE file for details
 * 
 * AgentService.java
 * Created on Jan 22, 2005
 */

package fi.hip.gb.bluetooth;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Vector;

import javax.microedition.io.StreamConnection;


/**
 * Bluetooth service for communication with GBAgent servers.
 * 
 * @author Juho Karppinen
 * @version $Id: AgentService.java 263 2005-05-18 19:59:19Z jkarppin $
 */
public class AgentService extends Service {	
	/**
	 * Vector of packets pending to be sent to remote service.
	 * When message is sent, it is removed from the vector.
	 */ 
	private Vector msgs = new Vector();
    
    public AgentService(EndPoint endpt, String url) {
        super(endpt, url);
    }
    public AgentService(EndPoint endpt, StreamConnection c) {
        super(endpt, c);
    }

    
	public void readMessages() {
	    this.con = null;
		try {
			openConnection();
		} catch (Exception e) {
		    BTService.getInstance().log("cannot open connection to " 
			        + this.url + " : "+ e.getMessage());
		}
	}
	
	/**
	 * Put the message on the queue, pending to be sent by Sender thread
	 * 
	 * @param signal
	 * @param str a string to be sended
	 */	
	public synchronized void putString(int signal, String str) {
		GPSResult res = new GPSResult();
		res.setName(str);
		putMessage(signal, res);
	}

	/**
	 * Put the message on the queue, pending to be sent by Sender thread
	 * 
	 * @param signal
	 * @param msg a message to be sended
	 */
	public synchronized void putMessage(int signal, GPSResult msg) {
		if(con == null) {
			// if connection doesn't exist, create it and initiate the
			// handshake protocol
			try {
				openConnection();
				putString(BTService.SIGNAL_HANDSHAKE, BTService.localName);
			} catch (Exception e) {
			    BTService.getInstance().log("cannot open connection to " + url 
				        + " : "+ e.getMessage());
				//MIDui.showException("cannot open bluetooth connection", e, null);
			}
		}

		//btnet.log("invoke putMessage " + signal + " " + msg.getName());
		msg.setType(signal);
		msgs.addElement(msg);
		synchronized (sender) {
			// tell sender that there is a message pending to be sent
			sender.notify();
		}
	}
	
	/**
	 * Gets a topmost message from the queue
	 * 
	 * @return message package, or null if no messages exists
	 */
	public synchronized GPSResult popMessage() {
		if (msgs.size() > 0) {
			// if there are message pending, return it and remove it from the
			// vector
		    GPSResult res = (GPSResult) msgs.firstElement();
			msgs.removeElementAt(0);
			return res;
		}
		// if there is no message pending. return null
		return null;
	}
	
	public synchronized boolean peekString() {
		return (msgs.size() > 0);
	}
    
    /**
     * Reader thread for the agent service.
     */
    class Reader implements Runnable {
        /*
         * @see java.lang.Runnable#run()
         */
        public void run() {
    		try {
    			DataInputStream datain = 
    			    AgentService.this.con.openDataInputStream();
    			while (!done) {
    				//endpt.btnet.log("Waiting for next signal from " + endpt.remoteName);
    				// read in the next signal (an integer)
    				// this will block until there is data to read
    				//int signal = datain.readInt();
    			    GPSResult msg = null;//new LiteResult(datain);
    				int signal = msg.getType();
    				if (signal == BTService.SIGNAL_MESSAGE) {
    					/*
    					String filename = datain.readUTF();
    					String description = datain.readUTF();
    					int length = datain.readInt();
    					endpt.btnet.log("length " + length);
    					byte[] data = new byte[length];
    					datain.read(data, 0, length);
    					*/
    					//LiteStatus message = new LiteStatus(filename, description, data);
    				    BTService.getInstance().log("Read in message '" + msg.getName() + "' from "
    							+ endpt.getName() /*+ ", " + description + " " + length + " b"*/);
    					
    					// emit RECEIVED event to BTListener implementation
    				    BTService.getInstance().fireEvent(BTListener.EVENT_RECEIVED,
    							endpt, msg);
    				} else if (signal == BTService.SIGNAL_HANDSHAKE) {
    					//String s = datain.readUTF();
    				    BTService.getInstance().log("Read in HANDSHAKE name " + msg.getName() + " from "
    							+ endpt.getName());
    					// update the remote user nick name
    					//endpt.remoteName = msg.getDescription().getJobname();
    					// echo acknowledgment and local user friendly name back to remote device
    					putString(BTService.SIGNAL_HANDSHAKE_ACK, BTService.localName);
    					
    					BTService.getInstance().fireEvent(BTListener.EVENT_JOIN, endpt, null);
    				} else if (signal == BTService.SIGNAL_HANDSHAKE_ACK) {
    					// the string data is the remote user nick name
    					//String s = datain.readUTF();
    				    BTService.getInstance().log("Read in HANDSHAKE_ACK name " + msg.getName() 
    					        + " from " + endpt.getName());
    					//endpt.remoteName = msg.getDescription().getJobname();
    					
    				    BTService.getInstance().fireEvent(BTListener.EVENT_JOIN, endpt, null);
    				} else if (signal == BTService.SIGNAL_TERMINATE) {
    				    BTService.getInstance().log("Read in TERMINATE from " + endpt.getName());
    					putString(BTService.SIGNAL_TERMINATE_ACK, "end");
    					// clean up end point resources and associated connections
    					closeConnection();
    				} else if (signal == BTService.SIGNAL_TERMINATE_ACK) {
    				    BTService.getInstance().log("read in TERMINATE_ACK from " + endpt.getName());
    					// doesn't do anything, just wake up from readInt() so that the
    					// thread can stop
    				} else {
    				    BTService.getInstance().log("Read unknown signal, probably connection closed");
    				}
    			}
    			datain.close();
    		} catch (Exception e) {
    		    BTService.getInstance().log("failed to read from " + endpt + " " + e.getMessage());
    			//MIDui.showException("cannot read over bluetooth from " + endPoint.remoteName, e, null);
    		}
    		
    		// remove the endpoint
    		//endPoint.btnet.callback.handleAction(BTListener.EVENT_LEAVE, endPoint, null);
    		//endPoint.btnet.cleanupRemoteEndPoint(endPoint);
    		BTService.getInstance().log("Reader thread exit for " + 
    		        AgentService.this.endpt.getName());
        }        
    }

    /**
     * Sender thread for agent service.
     */
    public class AgentSender implements Runnable {
        /*
         * @see java.lang.Runnable#run()
         */
    	public void run() {
    		try {
    			DataOutputStream dataout = 
    			    AgentService.this.con.openDataOutputStream();
    			while (!done) {
    				// check to see if there are any message to send.
    				// if not, then wait for 5 second
    				if (!peekString()) {
    					synchronized (this) {
    						this.wait(5000);
    					}
    				}
    				
    				// wake up and get next string
    				GPSResult msg = popMessage();
    				if (msg != null) { 
    					// if there is a message to send, send it now
    				    BTService.getInstance().log("Sending signal " + msg.getType() 
    					        + " name '" + msg.getName()
    							+ "' to " + endpt.getName());
    					
    					//msg.store(dataout);
    					
    					/*
    					dataout.writeInt(msg.getState());
    					dataout.writeUTF(msg.getName());
    					if(msg.getState() == BTService.SIGNAL_MESSAGE) {
    						dataout.writeUTF(msg.getDescription());
    						dataout.writeInt(msg.getSize());
    						dataout.write(msg.readBytes(), 0, msg.getSize());
    					}
    					*/
    					dataout.flush();
    					if(msg.getType() == BTService.SIGNAL_TERMINATE) {
    						// if the message is a TERMINATE signal, then break the run loop as
    						// well
    					    closeConnection();
    					}
    				}
    			}
    			// close the output stream
    			dataout.close();
    		} catch (Exception e) {
    		    BTService.getInstance().log("failed to send to " + endpt + " " + e.getMessage());
    			//MIDui.showException("failed to send over bluetooth to " 
    			//		+ endpt.remoteName, e, null);
    		}
    		
    		BTService.getInstance().log("Sender thread exit for " + 
    		        AgentService.this.endpt.getName());
    		BTService.getInstance().fireEvent(BTListener.EVENT_LEAVE, 
    		        AgentService.this.endpt, 
    		        null);
    		//endpt.btnet.cleanupRemoteEndPoint(endpt);
    	}
    }
}




See more files for this project here

GridBlocks

GridBlocks builds a grid application framework via easy-to-use building blocks in distributed environment. The framework offers components for Grid security, distributed storage, computing, and Portlet web interfaces.

Project homepage: http://sourceforge.net/projects/gridblocks
Programming language(s): Java,JSP,XML
License: other

  coordconv/
    LatitudeLongitude.java
  util/
    Properties.java
    StringTokenizer.java
  AgentService.java
  BTListener.java
  BTService.java
  EndPoint.java
  GPSResult.java
  NmeaService.java
  Service.java
  Util.java