NOTE:
This project is no longer being maintained: it was developed for my masters thesis, which was completed in early 1997. I still, however, welcome any questions or comments that people may have.

Source Code for iHTML Statistics Retrieval Demo


# Set host and port to connect with.
DEFHOST = 'www.cs.orst.edu'
DEFPORT = 55571

# Get the standard Python modules that are used.
import sys,time,string

# Get the iHTML modules that are used.
import ihBrowser, ihDoc, ihURL

class DocTracker(ihURL.LineURL):

    def __init__(self,doc,server):

	# Initialize the last document state that was sent to the server.
	self.last_clock = time.time()
	self.last_top = 0
	self.last_bottom = 0
	self.last_lines = 0
	self.doc = doc

	# Connect to the remote server.
	ihURL.LineURL.__init__(self,doc,server)
	result = (self.GetStatus(),self.GetURL())
	self.sock_result = `result`
	self.sock_address = self.GetURL()

	self.Write("* send\n")

    def OnLine(self,lines):
	self.doc.ShowProgress(self.GetURL() + ' - ' + lines[-1])

    def OnError(self,error):
	addr = self.GetURL()
	if( not addr ): addr = '[tcp connection]'
	self.doc.ShowProgress(addr + ' - ' + error)

    # Global document event handler.  After instantiating the class,
    # this method can be attached to the document's list of handlers.
    def doc_handler(self,doc,event):
	self.send_event(doc,string.lower(event.Code+""),event)

    # Send a new document state message to the server.
    def send_event(self,doc,action,event=None):
	if( self.GetStatus() != ihURL.URL_INTERACTIVE ):
	    return
	if( action == "initpos" or action == "scroll" ):
	    if self.last_clock != 0:
		new_clock = time.time()
		elapsed = new_clock - self.last_clock
		self.last_clock = new_clock
		if(elapsed > 0.2):
		    txt = "* " + action + ": top=" \
			  + `self.last_top` \
			  + "; bot=" + `self.last_bottom` \
			  + "; total=" + `self.last_lines` \
			  + "; time=" + ("%.2f" % elapsed) + " secs\n"
		    txt = "* " + action + " " + `self.last_top` + " " \
			  + `self.last_bottom` + " " + `self.last_lines` \
			  + " " + ("%.2f" % elapsed) + "\n"
		    self.Write(txt)
		else:
		    self.last_clock = time.time()
		self.last_top = doc.ViewTop
		self.last_bottom = doc.ViewBottom
		self.last_lines = doc.DocHeight
	elif( action == "print" ):
	    self.Write("* print\n")
	elif( action == "hitanchor" ):
	    anchor = ""
	    if( event ):
		anchor = event.AnchorName
	    self.Write("* anchor select " + anchor + "\n")
	elif( action == "onanchor" ):
	    anchor = ""
	    if( event ):
		anchor = event.AnchorName
	    self.Write("* anchor over " + anchor + "\n")
	elif( action == "offanchor" ):
	    self.Write("* anchor over\n")

class ihMain(ihDoc.Document):

    def __init__(self,**args):

        apply(ihDoc.Document.__init__,(self,),args)

	# Extract arguments
	if( args.has_key('Server') ):
	    self.server = args['Server']
	else:
	    self.server = 'tcp://'+DEFHOST+':'+`DEFPORT`

	self.tracker = DocTracker(self,self.server)

	# Clear progress display.
	self.ShowProgress()

	# Display the document.
	self.Reformat()

	# Send initial position report.
	self.tracker.send_event(self,"initpos")

	# Install the handler.
	self.Handlers.append(self.tracker.doc_handler)

__export__ = ['ihMain']

_________.oo_Q_Q_oo.____________________________________________
Dianne Kyra Hackborn <hackbod@angryredplanet.com>
Last modified: Wed Aug 14 14:55:54 PDT 1996

This web page and all material contained herein is Copyright (c) 1997 Dianne Hackborn, unless otherwise noted. All rights reserved.