/***********************************************************************/ /* Copyright (c) 2006, Jorg Liebeherr, University of Toronto */ /* All rights reserved. */ /* */ /* This program is being made available under the terms of version 2.1 */ /* of theGNU Lesser General Public License ("LGPL") as published as of */ /* February, 1999 by the Free Software Foundation; and subject to the */ /* restrictions of the LGPL, you are authorized to modify and/or */ /* redistribute it. */ /* */ /* As stated in the LGPL, THIS PROGRAM IS BEING MADE AVAILABLE "AS IS",*/ /* AND WITHOUT A WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, */ /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. FURTHER, YOU */ /* AGREE NOT TO HOLD THE COPYRIGHT OWNER(S) LIABLE FOR DAMAGES, */ /* INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,*/ /* ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM. */ /* See the GNU General Public License for more details. */ /* */ /* You should have received a copy of version 2.1 of the GNU General */ /* Public License along with this program; if not, you may obtain a */ /* copy from the Free Software Foundation website at the following URL*/ /* address (link active as of September 1, 2005): */ /* http://www.fsf.org/licensing/licenses/lgpl.html; or that failing, */ /* you can request a copy from Free Software Foundation, Inc., 51 */ /* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ /* */ /* This program is part of the HyperCast software distribution. To */ /* learn more about HyperCast, please visit the website at */ /* http://www.hypercast.org. */ /***********************************************************************/ /** HelloWorld_InterceptCallBack * * The HyperCast HelloWorld programs demonstrate various aspects of * the HyperCast API. The programs create an overlay socket that * sends and receives messages. * * In HelloWorld_InterceptCallBack takes advantage of the interception * callback. The interception callback provides access to messages before they * forwarded by the overlay socket. * This file corresponds to an example program in the HyperCast API description * (see Chapter: "API - The Basics", Section: "The HelloWorld program"). * * The file is a bit more complex than the example in the chapter. * * @author HyperCast Team * @version 2005 (version 3.0) * */ import hypercast.*; public class HelloWorld_InterceptCallBack implements I_ReceiveCallback , I_InterceptionCallback { // The string we send String MyString = new String("Hello World"); // The overlay socket I_OverlaySocket MySocket = null; // The configuration object HyperCastConfig ConfObj = null; public static void main(String[] args) { // Create a new HelloWorld_CallBack instance HelloWorld_InterceptCallBack hw = new HelloWorld_InterceptCallBack(); } public I_OverlayMessage InterceptionCallback (I_OverlayMessage msg) { // Timestamp String Time = Long.toString(System.currentTimeMillis()); Time = Time.substring(Time.length()-6, Time.length()); // Modify payload of the message by adding local address and timestamp String ChangedString = new String(msg.getPayload()) + "\n --> LA: " + MySocket.getLogicalAddress().toString()+ "\t Time: " + Time; msg.setPayload(ChangedString.getBytes()); //System.out.println("InterceptionCallback: " + ChangedString); return msg; } public void ReceiveCallback (I_OverlayMessage msg) { // Extract the payload byte[] data = msg.getPayload(); // Print the payload (Skip messages sent by this program) if(!msg.getSourceAddress().equals(MySocket.getLogicalAddress())) System.out.println("Received: "+ new String(data)); } public HelloWorld_InterceptCallBack () { // Create a configuration object ConfObj = HyperCastConfig.createConfig("hypercast.xml"); // Create an overlay socket with the configuration object MySocket=ConfObj.createOverlaySocket(this, null, this); // Join the overlay network MySocket.joinOverlay(); // Print the logical address */ String MyLogicalAddress = MySocket.getLogicalAddress().toString(); System.out.println("My Logical address is " + MyLogicalAddress + "."); // Repeat forever for(int i=1;i<100;i++) { // wait 2 seconds try { Thread.sleep(2000); } catch (InterruptedException e) {} // Timestamp String Time = Long.toString(System.currentTimeMillis()); Time = Time.substring(Time.length()-6, Time.length()); // Add logical address and timestamp, convert the string to a byte array and create a message byte[] MyData = (MyString + "\n --> LA: " + MySocket.getLogicalAddress().toString()+ "\t Time: " + Time).getBytes(); I_OverlayMessage MyMessage = MySocket.createMessage(MyData); // The message is sent to all members of the overlay // MySocket.sendToAll(MyMessage); System.out.println(" message sent."); } MySocket.closeSocket(); } }