RFX-GIMP

Hex Artifact Content
Login

Artifact a0a4754d33f4766c70b5091e18230d400e2c3591:


0000: 23 20 72 65 63 6f 6e 6e 65 63 74 20 74 6f 20 73  # reconnect to s
0010: 65 72 76 65 72 0a 0a 75 73 65 20 49 4f 3a 3a 53  erver..use IO::S
0020: 6f 63 6b 65 74 3b 0a 75 73 65 20 54 65 78 74 3a  ocket;.use Text:
0030: 3a 42 61 6c 61 6e 63 65 64 3b 0a 0a 24 69 6d 67  :Balanced;..$img
0040: 5f 65 78 74 3d 22 2e 70 6e 67 22 3b 20 23 20 74  _ext=".png"; # t
0050: 68 69 73 20 69 73 20 6e 6f 74 20 73 65 74 20 66  his is not set f
0060: 6f 72 20 74 72 69 67 67 65 72 20 63 6f 64 65 2e  or trigger code.
0070: 0a 0a 69 66 20 28 24 45 4e 56 7b 27 52 46 58 47  ..if ($ENV{'RFXG
0080: 49 4d 50 5f 50 4f 52 54 27 7d 29 20 7b 0a 20 20  IMP_PORT'}) {.  
0090: 24 72 66 78 5f 70 6f 72 74 20 3d 20 24 45 4e 56  $rfx_port = $ENV
00a0: 7b 27 52 46 58 47 49 4d 50 5f 50 4f 52 54 27 7d  {'RFXGIMP_PORT'}
00b0: 3b 0a 20 20 7d 0a 65 6c 73 65 20 7b 0a 20 20 24  ;.  }.else {.  $
00c0: 72 66 78 5f 70 6f 72 74 20 3d 20 31 30 30 30 38  rfx_port = 10008
00d0: 3b 0a 20 20 7d 0a 0a 24 73 6f 63 6b 20 3d 20 6e  ;.  }..$sock = n
00e0: 65 77 20 49 4f 3a 3a 53 6f 63 6b 65 74 3a 3a 49  ew IO::Socket::I
00f0: 4e 45 54 20 28 20 50 65 65 72 41 64 64 72 20 3d  NET ( PeerAddr =
0100: 3e 20 27 6c 6f 63 61 6c 68 6f 73 74 27 2c 0a 20  > 'localhost',. 
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 65                Pe
0130: 65 72 50 6f 72 74 20 3d 3e 20 24 72 66 78 5f 70  erPort => $rfx_p
0140: 6f 72 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ort,.           
0150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0160: 20 20 20 20 50 72 6f 74 6f 20 3d 3e 20 27 74 63      Proto => 'tc
0170: 70 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  p'.             
0180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0190: 20 20 29 3b 0a 69 66 20 28 20 6e 6f 74 20 64 65    );.if ( not de
01a0: 66 69 6e 65 64 20 24 73 6f 63 6b 20 29 20 7b 0a  fined $sock ) {.
01b0: 20 20 6d 79 20 24 72 66 78 5f 70 69 64 20 3d 20    my $rfx_pid = 
01c0: 66 6f 72 6b 28 29 3b 0a 20 20 69 66 20 28 6e 6f  fork();.  if (no
01d0: 74 20 64 65 66 69 6e 65 64 20 24 72 66 78 5f 70  t defined $rfx_p
01e0: 69 64 29 20 7b 0a 20 20 20 20 26 73 69 67 5f 65  id) {.    &sig_e
01f0: 72 72 6f 72 28 22 55 4e 41 42 4c 45 20 54 4f 20  rror("UNABLE TO 
0200: 45 58 45 43 55 54 45 20 47 49 4d 50 3a 20 4e 6f  EXECUTE GIMP: No
0210: 74 20 65 6e 6f 75 67 68 20 72 65 73 6f 75 72 63  t enough resourc
0220: 65 73 22 29 3b 0a 20 20 20 20 7d 0a 20 20 65 6c  es");.    }.  el
0230: 73 69 66 20 28 24 72 66 78 5f 70 69 64 20 3d 3d  sif ($rfx_pid ==
0240: 20 30 29 20 7b 0a 20 20 20 20 69 66 20 28 20 2d   0) {.    if ( -
0250: 66 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78  f $tmpdir . "rfx
0260: 67 69 6d 70 2e 70 69 64 22 29 20 7b 0a 20 20 20  gimp.pid") {.   
0270: 20 20 20 6f 70 65 6e 28 50 49 44 46 49 4c 45 2c     open(PIDFILE,
0280: 20 24 74 6d 70 64 69 72 20 2e 20 22 72 66 78 67   $tmpdir . "rfxg
0290: 69 6d 70 2e 70 69 64 22 29 3b 0a 20 20 20 20 20  imp.pid");.     
02a0: 20 23 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62   # should probab
02b0: 6c 79 20 64 6f 20 73 6f 6d 65 20 73 61 6e 69 74  ly do some sanit
02c0: 79 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 74  y checking for t
02d0: 68 65 20 6f 66 66 20 63 68 61 6e 63 65 20 74 68  he off chance th
02e0: 61 74 0a 20 20 20 20 20 20 23 20 74 68 65 20 50  at.      # the P
02f0: 49 44 20 68 61 73 20 62 65 65 6e 20 72 65 63 79  ID has been recy
0300: 63 6c 65 64 20 6f 72 20 74 68 65 20 73 79 73 74  cled or the syst
0310: 65 6d 20 68 61 73 20 72 65 62 6f 6f 74 65 64 20  em has rebooted 
0320: 28 65 2e 67 2c 20 63 68 65 63 6b 0a 20 20 20 20  (e.g, check.    
0330: 20 20 23 20 69 66 20 70 72 6f 63 65 73 73 20 77    # if process w
0340: 61 73 20 65 78 65 63 75 74 65 64 20 77 69 74 68  as executed with
0350: 20 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 2e 20   /usr/bin/perl. 
0360: 42 75 74 20 66 6f 72 20 6e 6f 77 2e 2e 2e 0a 20  But for now.... 
0370: 20 20 20 20 20 6b 69 6c 6c 28 31 35 2c 20 2d 3c       kill(15, -<
0380: 50 49 44 46 49 4c 45 3e 29 3b 20 23 20 74 68 65  PIDFILE>); # the
0390: 20 6e 65 67 61 74 69 76 65 20 50 49 44 20 6d 65   negative PID me
03a0: 61 6e 73 20 6b 69 6c 6c 20 61 6c 6c 20 63 68 69  ans kill all chi
03b0: 6c 64 72 65 6e 2c 20 74 6f 6f 2e 0a 20 20 20 20  ldren, too..    
03c0: 20 20 63 6c 6f 73 65 28 50 49 44 46 49 4c 45 29    close(PIDFILE)
03d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 73 65  ;.      }.    se
03e0: 74 70 67 69 64 28 24 24 2c 30 29 3b 20 23 20 63  tpgid($$,0); # c
03f0: 68 61 6e 67 65 20 74 68 65 20 70 67 72 6f 75 70  hange the pgroup
0400: 20 74 6f 20 74 68 69 73 20 66 6f 72 6b 65 64 20   to this forked 
0410: 70 72 6f 63 65 73 73 2c 20 72 61 74 68 65 72 20  process, rather 
0420: 74 68 61 6e 0a 20 20 20 20 20 20 20 20 20 20 20  than.           
0430: 20 20 20 20 20 20 20 20 23 20 74 68 65 20 6f 72          # the or
0440: 69 67 69 6e 61 6c 20 4c 69 56 45 53 20 28 73 6f  iginal LiVES (so
0450: 20 74 68 61 74 20 77 65 20 64 6f 6e 27 74 20 6b   that we don't k
0460: 69 6c 6c 20 4c 69 56 45 53 20 77 68 65 6e 0a 20  ill LiVES when. 
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 23 20 74 68 69 73 20 70 72 67 72 6f 75 70    # this prgroup
0490: 20 69 73 20 6b 69 6c 6c 65 64 29 2e 0a 20 20 20   is killed)..   
04a0: 20 6f 70 65 6e 28 50 49 44 46 49 4c 45 2c 20 22   open(PIDFILE, "
04b0: 3e 22 20 2e 20 24 74 6d 70 64 69 72 20 2e 20 22  >" . $tmpdir . "
04c0: 72 66 78 67 69 6d 70 2e 70 69 64 22 29 3b 20 23  rfxgimp.pid"); #
04d0: 20 6f 76 65 72 77 72 69 74 65 20 6f 6c 64 20 66   overwrite old f
04e0: 69 6c 65 0a 20 20 20 20 70 72 69 6e 74 20 50 49  ile.    print PI
04f0: 44 46 49 4c 45 20 24 24 3b 0a 20 20 20 20 63 6c  DFILE $$;.    cl
0500: 6f 73 65 28 50 49 44 46 49 4c 45 29 3b 0a 20 20  ose(PIDFILE);.  
0510: 20 20 6d 79 20 24 73 74 61 72 74 5f 67 69 6d 70    my $start_gimp
0520: 20 3d 20 71 71 7b 20 67 69 6d 70 20 2d 69 20 2d   = qq{ gimp -i -
0530: 62 20 22 28 70 6c 75 67 2d 69 6e 2d 73 63 72 69  b "(plug-in-scri
0540: 70 74 2d 66 75 2d 73 65 72 76 65 72 20 31 20 24  pt-fu-server 1 $
0550: 72 66 78 5f 70 6f 72 74 20 5c 5c 5c 22 5c 5c 5c  rfx_port \\\"\\\
0560: 22 29 22 20 26 20 7d 3b 0a 20 20 20 20 73 79 73  ")" & };.    sys
0570: 74 65 6d 20 28 20 24 73 74 61 72 74 5f 67 69 6d  tem ( $start_gim
0580: 70 20 29 3b 20 23 20 74 68 6f 75 67 68 20 73 74  p ); # though st
0590: 61 72 74 65 64 20 61 73 20 73 65 70 61 72 61 74  arted as separat
05a0: 65 20 70 72 6f 63 65 73 73 2c 20 47 49 4d 50 20  e process, GIMP 
05b0: 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 20  now.            
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 23 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 69  # is part of thi
05e0: 73 20 73 70 61 77 6e 65 64 20 63 68 69 6c 64 27  s spawned child'
05f0: 73 20 70 67 72 6f 75 70 2c 20 6e 6f 74 20 74 68  s pgroup, not th
0600: 65 20 4c 69 56 45 53 20 70 67 72 6f 75 70 0a 20  e LiVES pgroup. 
0610: 20 20 20 73 6c 65 65 70 28 29 3b 20 23 20 64 6f     sleep(); # do
0620: 20 6e 6f 74 68 69 6e 67 2c 20 66 6f 72 65 76 65   nothing, foreve
0630: 72 0a 20 20 20 20 26 73 69 67 5f 65 72 72 6f 72  r.    &sig_error
0640: 28 22 47 49 4d 50 20 6b 69 6c 6c 65 64 20 62 79  ("GIMP killed by
0650: 20 65 78 74 65 72 6e 61 6c 20 70 72 6f 63 65 73   external proces
0660: 73 5c 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 65  s\n");.    }.  e
0670: 6c 73 65 20 7b 0a 20 20 20 20 77 68 69 6c 65 20  lse {.    while 
0680: 28 6e 6f 74 20 64 65 66 69 6e 65 64 20 24 73 6f  (not defined $so
0690: 63 6b 29 20 7b 0a 20 20 20 20 20 20 73 6c 65 65  ck) {.      slee
06a0: 70 20 28 31 29 3b 0a 20 20 20 20 20 20 24 73 6f  p (1);.      $so
06b0: 63 6b 20 3d 20 6e 65 77 20 49 4f 3a 3a 53 6f 63  ck = new IO::Soc
06c0: 6b 65 74 3a 3a 49 4e 45 54 20 28 20 50 65 65 72  ket::INET ( Peer
06d0: 41 64 64 72 20 3d 3e 20 27 6c 6f 63 61 6c 68 6f  Addr => 'localho
06e0: 73 74 27 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st',.           
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 20 20 20 20 20 20 20 50 65 65 72 50 6f            PeerPo
0710: 72 74 20 3d 3e 20 24 72 66 78 5f 70 6f 72 74 2c  rt => $rfx_port,
0720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0740: 20 20 20 20 20 20 50 72 6f 74 6f 20 3d 3e 20 27        Proto => '
0750: 74 63 70 27 0a 20 20 20 20 20 20 20 20 20 20 20  tcp'.           
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0770: 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
0780: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a        }.    }.  }.