use strict; use warnings; use File::Copy; use Net::FTP; my $logname; my $srcpath="\\SD Card\\PDA\\perl58m\\scripts"; my $dstpath="\\TomTom\\SdkFileCalls"; my $sdkfile; my $routesecstodestination; my $logmess; my $retcode; my $webmess; sub getyear{ # Get number of years since 1900 my $OFFSET=sprintf("%d",@_); my $YEAR=(localtime(time+$OFFSET))[5]; # Subtract 100 to turn into yy format $YEAR=$YEAR-100; # Return year $YEAR } # getyear sub getmonth{ # Get month as zero based (0 is January) my $OFFSET=sprintf("%d",@_); my $MONTH=(localtime(time+$OFFSET))[4]; # Add 1 to turn into 'normal' month numbering $MONTH=$MONTH+1; # Return month $MONTH } # getmonth sub getday{ # Get day of month (1 is 1st of month) my $OFFSET=sprintf("%d",@_); my $DAY=(localtime(time+$OFFSET))[3]; # Return day $DAY } # getday sub construct_logname{ # Contruct filename based on date and type of product that is piping debug # to us $logname=sprintf("%s\\%02d%02d%02d.tomlog.txt", $srcpath,getyear(0),getmonth(0),getday(0)); } # construct_filename # Start of program flow sub log_list{ # Log the contents of the list that is passed to us my @page=@_; my $datetime; my $line; # Open the log file for appending open(LOGFILE,">>$logname"); printf(LOGFILE"Last Update: "); $datetime=localtime(); printf(LOGFILE"%s\n",$datetime); foreach $line (@page){ printf(LOGFILE"%s\n",$line); printf("%s\n",$line); } close(LOGFILE); } # log_list sub ls_sdk{ # List all present SDK files my @loglines; $retcode=opendir(DIR,$dstpath); while ($_=readdir(DIR)) { next if /^\.{1,2}$/; # skip . and .. # List each found file $sdkfile=sprintf("%s\\%s",$dstpath,$_); push(@loglines,$sdkfile); } closedir DIR; log_list(@loglines); } # ls_sdk sub erase_sdk_files{ # Erase any existing TomTom SDK to TomTom server and TomTom Server to TomTom # SDK files $logmess=sprintf("Start of erase_sdk_files"); log_list($logmess); ls_sdk(); $retcode=opendir(DIR,$dstpath); while ($_=readdir(DIR)) { next if /^\.{1,2}$/; # skip . and .. # Delete each found file $sdkfile=sprintf("%s\\%s",$dstpath,$_); $logmess=sprintf("About to delete %s",$sdkfile); log_list($logmess); unlink($sdkfile); } closedir DIR; ls_sdk(); $logmess=sprintf("End of erase_sdk_files"); log_list($logmess); } # erase_sdk_files sub create_sdk_files{ $logmess=sprintf("Start of create_sdk_files"); log_list($logmess); ls_sdk(); # Perform "GetCurrentPosition" SDK API call into TomTom $sdkfile=sprintf("%s\\SDK.TomTomNavigationServer.1050229.1.message",$srcpath); $logmess=sprintf("Copying %s to %s",$sdkfile,$dstpath); log_list($logmess); $retcode=copy($sdkfile,$dstpath); $logmess=sprintf("Copied"); log_list($logmess); ls_sdk(); sleep(5); $logmess=sprintf("Slept for 5 secs"); log_list($logmess); ls_sdk(); $sdkfile=sprintf("%s\\SDK.TomTomNavigationServer.1050229.1.finished",$srcpath); $logmess=sprintf("Copying %s to %s",$sdkfile,$dstpath); log_list($logmess); $retcode=copy($sdkfile,$dstpath); $logmess=sprintf("Copied"); log_list($logmess); ls_sdk(); sleep(5); $logmess=sprintf("Slept for 5 secs"); log_list($logmess); ls_sdk(); $logmess=sprintf("End of create_sdk_files"); log_list($logmess); } # create_sdk_files sub read_sdk_files{ my @lines; my @fields; my @loglist; my $line; my $result; my $routeminstodestination; my $mm; my $hh; $logmess=sprintf("Start of read_sdk_files"); log_list($logmess); ls_sdk(); $sdkfile=sprintf("%s\\TomTomNavigationServer.SDK.1050229.1.message",$dstpath); $logmess=sprintf("Reading from %s",$sdkfile); log_list($logmess); open(INPUT,"<$sdkfile"); @lines=; foreach $line (@lines){ $result=sprintf("%s",$line); } close(INPUT); $logmess=sprintf("Closed the file"); log_list($logmess); ls_sdk(); $logmess=sprintf("Read all the lines"); log_list($logmess); $logmess=sprintf("Result line is:\n%s",$result); log_list($logmess); # Seperate each field by the | symbol @fields=split('\|',$result); $logmess=sprintf("Have split all the fields"); log_list($logmess); $routesecstodestination=sprintf("%d",$fields[13]); $routeminstodestination=$routesecstodestination / 60; $mm=$routeminstodestination % 60; $hh=$routeminstodestination / 60; if ($routesecstodestination > 0){ $webmess=sprintf("Journey time left is %d hours and %d minutes",$hh,$mm); $logmess=sprintf("Webmess is:\n%s",$webmess); log_list($logmess); } } # read_sdk_files sub update_page{ # Send to FTP server contents of passed list my @page=@_; my $webfilename; my $datetime; my $line; my $ftp; $logmess=sprintf("About to open webfile.txt"); log_list($logmess); $webfilename=sprintf("%s\\webfile.txt",$srcpath); # Open the log file for appending open(LOGFILE,">$webfilename"); printf(LOGFILE"Last Update: "); $datetime=localtime(); printf(LOGFILE"%s\n",$datetime); foreach $line (@page){ printf(LOGFILE"%s\n",$line); printf("%s\n",$line); } $logmess=sprintf("About to close webfile.txt"); log_list($logmess); close(LOGFILE); $logmess=sprintf("About to make FTP connection"); log_list($logmess); $ftp=Net::FTP->new("yourserver",Debug=>1,Timeout=>5,Passive=>1); if (defined($ftp)) { $logmess=sprintf("About to login to FTP server"); log_list($logmess); $ftp->login("yourusername","yourpassword"); $logmess=sprintf("About to change directory"); log_list($logmess); $ftp->cwd("yourfolder"); $logmess=sprintf("About to put file"); log_list($logmess); $ftp->put("$webfilename"); $logmess=sprintf("About to quit FTP"); log_list($logmess); $ftp->quit; } } # update_page # Start of program flow construct_logname(); while(1){ $logmess=sprintf("Sleeping for 10 mins"); log_list($logmess); # Sleep for 10 mins at a time sleep(600); $logmess=sprintf("Waking up"); log_list($logmess); erase_sdk_files(); create_sdk_files(); read_sdk_files(); if ($routesecstodestination > 0){ update_page($webmess); } }