CODE: 1) COUNTER.ASPX :- THE COUNTER PAGE
<%@ IMPORT NAMESPACE="SYSTEM.IO" %> <%@ ASSEMBLY NAME="SYSTEM.XML" %> <%@ IMPORT NAMESPACE="SYSTEM.XML" %> <%@ PAGE LANGUAGE="C#" ENABLESESSIONSTATE="TRUE" %> <%-- THESE ARE THE IMPORTED ASSEMBILES AND NAMESPACES NEED TO RUN THE COUNTER --%> <HTML> <HEAD> <TITLE>SAURABH'S XML COUNTER SCRIPT</TITLE> <SCRIPT LANGUAGE="C#" RUNAT="SERVER"> //SCRIPT IS CALLED WHEN THE PAGE IS LOADED PUBLIC VOID PAGE_LOAD(OBJECT SRC, EVENTARGS E) { //THE PATH TO THE XML FILE WHICH WILL CONTAIN ALL THE DATA //MODIFY THIS IF YOU HAVE ANY OTHER FILE OR DIRECTORY MAPPINGS. //MODIFY THIS IF YOU HAVE BEEN DIRECTED HERE FROM STEP 2 OF THE README FILE. STRING DATAFILE="DB/XMLCOUNTER.XML" ;
IF(!PAGE.ISPOSTBACK){ //TRY-CATCH BLOCK CONTAINING THE COUNTER CODE TRY { //CREATE AN INSTANCE OF THE CLASS XMLDOCUMENT XMLDOCUMENT XMLDOCUMENT = NEW XMLDOCUMENT() ;
//OPEN A FILESTREAM TO THE SPECIFIED FILE FILESTREAM FIN ; //IT IS VERY IMPORTANT TO SPECIFY THE "FILESHARE.READWRITE" OPTION. //THIS ALLOWS OTHER VIEWERS TO ALSO READ AND WRITE TO THE DATABASE //THIS WAS MISSING IN MY LAST RELEASE HENCE THERE WAS A BUG !!! FIN = NEW FILESTREAM(SERVER.MAPPATH(DATAFILE), FILEMODE.OPEN, FILEACCESS.READ, FILESHARE.READWRITE) ; //LOAD THE DOCUMENT XMLDOCUMENT.LOAD(NEW STREAMREADER(FIN)) ; FIN.CLOSE(); //CREATE AN INSTANCE OF THE DOCUMENTNAVIGATOR CLASS USED TO //NAVIGATE THROUGH AND XML FILE DOCUMENTNAVIGATOR NAVIGATOR = NEW DOCUMENTNAVIGATOR(XMLDOCUMENT) ;
//MOVE TO THE FIRST ELEMENT (IN MY FILE 'VISITORS') NAVIGATOR.MOVETODOCUMENTELEMENT() ; //MOVE TO IT CHILD AT POSITION '0' (IE.IN MY FILE 'TOTAL' NODE) NAVIGATOR.MOVETOCHILD(0) ;
//CHECK IF WE ARE ON THE RIGHT ELEMENT WHICH HAS AN ATTRIBUTE IF (NAVIGATOR.HASATTRIBUTES) { //GET THE ATTRIBUTE OF THE NODE 'TOTAL' CALLED 'TOT' (SEE THE XMLCOUNTER.XML FILE) //SINCE THE VALUE STORED IS IN A STRING FORMAT WE 'CAST' IT INTO A INT TYPE INT TOTAL = INT.PARSE(NAVIGATOR.GETATTRIBUTE("TOT")) ; //INCREASE THE COUNTER TOTAL++ ; //SHOW THE COUNTER ON THE PAGE COUNTMESS.TEXT = "YOU ARE VISITOR NO: "+TOTAL.TOSTRING() ; //SAVE THE INCREMENTED COUNTER BACK IN THE XML FILE NAVIGATOR.SETATTRIBUTE(0,TOTAL.TOSTRING() ); }
//UPDATE THE DATABASE ONLY IF A NEW SESSION IS THERE IF(SESSION["COUNTER"]==NULL) { //MOVE BACK TO THE DOCUMENT ELEMENT NAVIGATOR.MOVETODOCUMENTELEMENT() ; NAVIGATOR.MOVETOCHILD(0) ; //THEN INSERT THE ELEMENT AFTER THE 'TOTAL' ELEMENT WHICH WILL CONTAIN ALL //THE INFORMATION OF A SINGLE VISITOR NAVIGATOR.INSERT(TREEPOSITION.AFTER , XMLNODETYPE.ELEMENT, "VIEWER","","") ; //MAKE AN INSTANCE TO THE HTTPURL CLASS TO GET INFORMATION OF THE REFERRER TO //THE PAGE IF ANY. IF THERE ARE NO REFERRERS THEN BY DEFAULT THIS OBJECT IS 'NULL' //SO WE HAVE TO MAKE A CHECK IF IT IS NULL AND DO THE NEEDFUL HTTPURL OBJURL = REQUEST.URLREFERRER; IF(OBJURL!=NULL) { NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.ELEMENT,"REFERRER","",""); NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"REFERRER","","") ; NAVIGATOR.VALUE = OBJURL.HOST ; } ELSE { NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.ELEMENT,"REFERRER","",""); NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"REFERRER","","") ; NAVIGATOR.VALUE = "DIRECT" ; } //RELEASE THE RESOURCE FOR GARBAGE COLLECTION OBJURL=NULL ; //MOVE TO PARENT NODE AND THEN INSERT THE INFORMATION ABOUT THE USERAGENT NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"USERAGENT","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"USERAGENT","","" ) ; NAVIGATOR.VALUE = REQUEST.USERAGENT ; NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"USERHOSTADDRESS","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"USERHOSTADDRESS","","" ) ; NAVIGATOR.VALUE = REQUEST.USERHOSTADDRESS ; NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"USERHOSTNAME","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"USERHOSTNAME","","" ) ; NAVIGATOR.VALUE = REQUEST.USERHOSTNAME ; //TO GET MORE INFORMATION OF THE USERS BROWSERS CAPABILITIES MAKE AN OBJECT //OF THE HTTPBROWSERCAPABILITIES CLASS HTTPBROWSERCAPABILITIES BC = REQUEST.BROWSER;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"BROWSERTYPE","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"BROWSERTYPE","","" ) ; NAVIGATOR.VALUE = BC.TYPE ;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"BROWSERNAME","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"BROWSERNAME","","" ) ; NAVIGATOR.VALUE = BC.BROWSER ;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"MAJORVERSION","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"MAJORVERSION","","" ) ; NAVIGATOR.VALUE = BC.MAJORVERSION.TOSTRING() ;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"MINORVERSION","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"MINORVERSION","","" ) ; NAVIGATOR.VALUE = BC.MINORVERSION.TOSTRING(); ;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"PLATFORM","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"PLATFORM","","" ) ; NAVIGATOR.VALUE = BC.PLATFORM ;
//MAKE AN OBJECT OF THE DATETIME CLASS TO GET THE DATE TIME DATETIME NOW = DATETIME.NOW ; NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"DATE","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"DATE","","" ) ; NAVIGATOR.VALUE = NOW.TOSHORTDATESTRING() ;
NAVIGATOR.MOVETOPARENT() ; NAVIGATOR.INSERT(TREEPOSITION.AFTER, XMLNODETYPE.ELEMENT,"TIME","","" ) ; NAVIGATOR.INSERT(TREEPOSITION.FIRSTCHILD, XMLNODETYPE.TEXT,"TIME","","" ) ; NAVIGATOR.VALUE = NOW.TOSHORTTIMESTRING() ; //CREATE A FILE STREAM AGAIN TO WRITE TO THE DATABASE //AGAIN REMEMBER TO SPECIFY THE "FILESHARE.READWRITE" FILESTREAM FOUT ; FOUT = NEW FILESTREAM(SERVER.MAPPATH(DATAFILE), FILEMODE.OPEN, FILEACCESS.WRITE, FILESHARE.READWRITE) ;
//FINALLY SAVE THE USER DATA TO THE XML DATABASE FILE XMLDOCUMENT.SAVE(NEW STREAMWRITER(FOUT)) ; //FREE THE RESOURCES EXPLICITLY FOR OTHER CLASSES TO USE FOUT.CLOSE(); NAVIGATOR=NULL ; XMLDOCUMENT=NULL ; //JUST STORE ANY VALUE TO THE SESSION SESSION["COUNTER"]=1 ; }
} CATCH(EXCEPTION EDD) { //CATCH OTHER EXCEPTIONS RESPONSE.WRITE("<FONT COLOR=#FF0000>AN EXCEPTION OCCURRED "+EDD.TOSTRING()+"</FONT>") ; }
} }
</SCRIPT> </HEAD>
<BODY >
<H3 ALIGN="CENTER">WELCOME TO SAURABH'S COUNTER SCRIPT</H3> <BR> <P ALIGN="CENTER"> THIS IS A SAMPLE PAGE WHICH HAS THE COUNTER SCRIPTING IN IT. TAKE THE SCRIPT FROM THIS PAGE AND PASTE IT ON YOUR PAGE.
</P> <ASP:LABEL TEXT="YOU ARE VISITOR NO: 0" STYLE="FONT-SIZE:28PT" ID="COUNTMESS" RUNAT="SERVER" />
</BODY>
</HTML>
2) VIEWCOUNTER.ASPX : THE COUNTER INFORMATION VIEWING PAGE
<%@ IMPORT NAMESPACE="SYSTEM" %> <%@ IMPORT NAMESPACE="SYSTEM.IO" %> <%@ IMPORT NAMESPACE="SYSTEM.DATA" %> <%@ ASSEMBLY NAME="SYSTEM.XML" %> <%@ IMPORT NAMESPACE="SYSTEM.XML" %> <%@ PAGE LANGUAGE="C#" %> <HTML> <HEAD> <TITLE>SAURABH'S XML COUNTER SCRIPT</TITLE> <SCRIPT LANGUAGE="C#" RUNAT=SERVER> //THIS SCRIPT IS EXECUTE WHEN THE PAGE IS LOADED PUBLIC VOID PAGE_LOAD(OBJECT SENDER, EVENTARGS E) { //THE PATH TO THE XML FILE WHICH WILL CONTAIN ALL THE DATA //MODIFY THIS IF YOU HAVE ANY OTHER FILE OR DIRECTORY MAPPINGS. //MODIFY THIS IF YOU HAVE BEEN DIRECTED HERE FROM STEP 2 OF THE README FILE. STRING DATAFILE="DB/XMLCOUNTER.XML" ; TRY { //MAKE AN INSTANCE OF THE XMLDATADOCUMENT CLASS WHICH READS DATA FROM A //XML FILE AND STORES IT IN AN DATASET OBJECT XMLDATADOCUMENT DATADOC = NEW XMLDATADOCUMENT();
//OPEN A FILESTREAM TO THE DATABASE //"FILESHARE.READWRITE" ENABLES OTHER USER TO ALSO READ AND WRITE TO THE FILE FILESTREAM FIN ; FIN = NEW FILESTREAM(SERVER.MAPPATH(DATAFILE), FILEMODE.OPEN, FILEACCESS.READ, FILESHARE.READWRITE) ; // INFER THE DATASET SCHEMA FROM THE XML DATA AND LOAD THE XML DATA DATADOC.DATASET.READXML(NEW STREAMREADER(FIN)); //CLOSE THE STREAM FIN.CLOSE();
//GET THE TOTAL NO OF VIEWERS BY GETTING THE COUNT OF THE NO OF ROWS PRESENT //IN THE TABLE SHOWTOTAL.TEXT ="TOTAL VIEWERS :"+ DATADOC.DATASET.TABLES[1].ROWS.COUNT.TOSTRING() ;
//DATABIND THE REPEATER TO THE DATASET OF TABLE '1' IE THE 'VIEWER' MYDATALIST.DATASOURCE = DATADOC.DATASET.TABLES[1].DEFAULTVIEW; MYDATALIST.DATABIND();
//FREE THE RESOURCES DATADOC=NULL ;
} CATCH (EXCEPTION ED) { //IF THERE IS ANY EXCEPTION THEN DISPLAY IT RESPONSE.WRITE("<FONT COLOR=#FF0000>AN EXCEPTION OCCURED "+ED.TOSTRING()+"</FONT>") ; } } </SCRIPT> </HEAD> <BODY > <H4>WELCOME TO SAURABH'S XML COUNTER VIEWING PAGE.</H4> <ASP:LABEL ID="SHOWTOTAL" TEXT="" RUNAT="SERVER" /> <BR>
<ASP:REPEATER ID="MYDATALIST" RUNAT="SERVER"> <TEMPLATE NAME="HEADERTEMPLATE"> <H5> VIEWER DETAILS </H5> </TEMPLATE> <TEMPLATE NAME="ITEMTEMPLATE"> <BR> <TABLE CLASS="MAINHEADS" WIDTH="60%" STYLE="FONT: 8PT VERDANA" > <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>REFERRER :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "REFERRER") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>USER AGENT :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "USERAGENT") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>USER HOST ADDRESS :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "USERHOSTADDRESS") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>USER HOST NAME :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "USERHOSTNAME") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>BROWSER TYPE :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "BROWSERTYPE") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>BROWSER NAME :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "BROWSERNAME") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>MAJOR VERSION :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "MAJORVERSION") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>MINOR VERSION :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "MINORVERSION") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>PLATFORM :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "PLATFORM") %> </TD></TR> <TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>DATE :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "DATE") %> </TD></TR>
<TR STYLE="BACKGROUND-COLOR:#FFFFCC"> <TD>TIME :</TD> <TD> <%# DATABINDER.EVAL(CONTAINER.DATAITEM, "TIME") %> </TD> </TR> </TABLE><BR> </TEMPLATE> </ASP:REPEATER> </BODY> </HTML>
|