func init // add using module sys.add_use('System.Threading') sys.add_use('PortScanner') // use external class sys.UseClass("PortScan") sys.UseClass("PortsInfo") // define instance sys.add_object(this.codename, 'Scanner', d("IP") + ', ' + d("Port")) if(linked("PortFound")) sys.add_var('port', 1) end if(linked("doScanTurbo") or linked("PortFound")) this.setfield('scan', 'scan' + this.id) end // initialize events if(linked("onResult")) sys.blocks_store() blk_init.println(this.codename, '.ScanCallback += new ScanCompleteHandler(ScanCompleteCallback);') event("onResult", 'datainfo as string') blk_proc_imp.inc().println('private void ScanCompleteCallback(Object sender, string datainfo) { // ', this.codename, ':onResult').inc() .println('if (this.InvokeRequired) {').inc() .println('try {').inc() .println('this.Invoke(new ScanCompleteHandler(ScanCompleteCallback), new object[] { sender, datainfo });') .dec().println('} catch {} return;') .dec().println('}') if(not blk_lvars.empty()) blk_proc_imp.copyhere(blk_lvars) end if(linked("PortFound")) blk_proc_imp.println('Scanner ', this.scan, ' = sender as Scanner;') .println(this.port, ' = ', this.scan, '.Port;') end blk_proc_imp.copyhere(blk) .dec().println('}').dec() sys.blocks_restore() end if(linked("onFailed")) sys.blocks_store() event("onFailed") blk_init.println(this.codename, '.FailedCallback += new ScanFailedHandler(ScanFailedCallback);') blk_proc_imp.inc().println('private void ScanFailedCallback(Object sender) { // ', this.codename, ':onFailed').inc() .println('if (this.InvokeRequired) {').inc() .println('try {').inc() .println('this.Invoke(new ScanFailedHandler(ScanFailedCallback), new object[] { sender });') .dec().println('} catch {} return;') .dec().println('}') if(not blk_lvars.empty()) blk_proc_imp.copyhere(blk_lvars) end if(linked("PortFound")) blk_proc_imp.println('Scanner ', this.scan, ' = sender as Scanner;') .println(this.port, ' = ', this.scan, '.Port;') end blk_proc_imp.copyhere(blk) .dec().println('}').dec() sys.blocks_restore() end end func doScan(ip, port) blk.println(this.codename, '.IP = ', d("IP"), ';') .println(this.codename, '.Port = ', d("Port"), ';') .println('Thread t = new Thread(new ThreadStart(', this.codename, '.Checks));') .println('t.Start();') end func doScanTurbo(ip, port) blk.println('Scanner ', this.scan, ' = new Scanner(', d("IP"), ', ', d("Port"), ');') .println(this.scan, '.ScanCallback += new ScanCompleteHandler(ScanCompleteCallback);') .println(this.scan, '.FailedCallback += new ScanFailedHandler(ScanFailedCallback);') .println('Thread t = new Thread(new ThreadStart(', this.scan, '.Checks));') .println('t.Start();') end func PortFound return(this.port) end