#!perl

use SOAP::Lite;
use IO::File;

my $service = SOAP::Lite
  ->uri('urn:msd_soap_service')
  ->proxy('http://www.ebi.ac.uk/msd-srv/msdsoap'); # Or:
# -> service('http://www.ebi.ac.uk/msd/api/msd_soap_service.wsdl');
 my $query = '<SSMInput> <query> <type>PDB entry</type> <pdbcode>9xia</pdbcode>'.
'</query> <target> <type>PDB archive</type>'.
'</target> <selection> <type>Chain(s)</type>'.
'<chains>*(all)</chains> </selection> <percent1>70</percent1>'.
'<percent2>70</percent2> <sepchains>Yes</sepchains>'.
'<connectivity>Yes</connectivity> <bestmatch>Yes</bestmatch>'.
'<uniquematch>Yes</uniquematch> <precision>Normal</precision>'.
'<sorting>RMSD</sorting> </SSMInput>';

my $sessionid = 'myprofunc1212';  
my $array = [$query , $sessionid];
print "\nCalling method: msdSSM()\n";
my $ssmok;
my $result1 = $service->msdSSM(SOAP::Data->name('numofpars' => 2),
                               SOAP::Data->name('inparams' => $array));
unless ($result1->fault) {
    print "\nmsdSSM() called successfully.\n";
	print $result1->result();
	$ssmok = 0;
}else{
    $ssmok = 1;
	print join  ', ', 
	$result1->faultcode, 
    $result1->faultstring;
	print "\n";
}

if ( $ssmok == 0) {

for ($i=1; $i > 0 ; $i++) 
 { my $result2 = $service->msdGetSoapBase64Data(SOAP::Data->name('diyf')->type('xsd:int')->value(1), # 0
                          SOAP::Data->name('sessionid')->type('xsd:string')->value($sessionid));
		  unless ($result2->fault || ($result2->faultstring != 'Result fille not ready')) {
          $i=-1;
		  print $result2->result();
		  $fh = new IO::File "> my_result.xml";
          if (defined $fh) {
            print $fh $result2->result();
            $fh->close;
		    print "\nResult file created successfully:\n";
          }
		  }else{
			print join  ', ', 
			"\nXML File not ready...retry: $i ",
			$result2->faultcode, 
            $result2->faultstring;
		  }
     	  sleep(5);
  }
  my $result3 = $service->msdSSMPurge(SOAP::Data->name('sessionid')->type('xsd:string')->value($sessionid));
  unless ($result3->fault) {
    print "\nmsdSSMPurge() called successfully.\n";
	print $result3->result();
}else{
	print join  ', ', 
	$result3->faultcode, 
    $result3->faultstring;
}	
} 
  
  
