<?php namespace App\Console\Commands; use Carbon\Carbon; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use App\Classes\File; use App\Classes\FTN\Packet; use App\Jobs\MessageProcess as Job; use App\Models\Address; class PacketProcess extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'packet:process' .' {file : Packet to process}' .' {--N|nobot : Dont process bots}' .' {ftn? : System the packet is from}' .' {--Q|dontqueue : Dont queue the message}'; /** * The console command description. * * @var string */ protected $description = 'Process Packet'; /** * Execute the console command. * * @return void * @throws \App\Classes\FTN\InvalidPacketException */ public function handle() { $fs = Storage::disk(config('fido.local_disk')); $rel_name = sprintf('%s/%s',config('fido.dir'),$this->argument('file')); $f = new File($fs->path($rel_name)); $m = []; if ($this->argument('ftn')) { $a = Address::findFTN($this->argument('ftn')); } elseif (preg_match(sprintf('/^%s\.(.{3})$/',Packet::regex),$this->argument('file'),$m)) { $a = Address::findOrFail(hexdec($m[1])); } else { $this->error('Unable to determine sender FTN address'); exit(1); } foreach ($f as $packet) { foreach ($pkt = Packet::process($packet,$f->itemName(),$f->itemSize(),$a?->zone->domain) as $msg) { // @todo Quick check that the packet should be processed by us. $this->info(sprintf('Processing message from [%s] with msgid [%s] in (%s)',$msg->fboss,$msg->msgid,$f->pktName())); // Dispatch job. if ($this->option('dontqueue')) Job::dispatchSync($msg,$f->pktName(),$a,$pkt->fftn_o,Carbon::now(),$this->option('nobot')); else Job::dispatch($msg,$f->pktName(),$a,$pkt->fftn_o,Carbon::now(),$this->option('nobot')); } } } }