CSS Bulletsのreload.rb

CSS Bulletsの更新をLinuxのEmacsでしたいのにreload.rbどこにあるんだよ的な状況になったので、とりあえず作りました。

#!/usr/bin/ruby
require "socket"
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(9989, "255.255.255.255")
udp.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
udp.send("reload", 0, sockaddr)
udp.close

UDPブロードキャストでポート9989に適当にreloadと投げるだけ。

でもreloadがrubyだと遅くてイライラかもしれないのでバイナリ版も作った。

with Ada.Streams;
with GNAT.Sockets;

procedure Reload is
   Socket         : GNAT.Sockets.Socket_Type;
   Socket_Address : GNAT.Sockets.Sock_Addr_Type;
   Last : Ada.Streams.Stream_Element_Offset;

begin
   GNAT.Sockets.Initialize;
   GNAT.Sockets.Create_Socket(Socket, Mode => GNAT.Sockets.Socket_Datagram);
   Socket_Address.Addr := GNAT.Sockets.Broadcast_Inet_Addr;
   Socket_Address.Port := 9989;
   GNAT.Sockets.Set_Socket_Option(Socket => Socket, Option => (GNAT.Sockets.Broadcast, true));
   GNAT.Sockets.Send_Socket(Socket, (16#72#, 16#65#, 16#6C#, 16#6F#, 16#61#, 16#64#), Last, Socket_Address);
   GNAT.Sockets.Close_Socket(Socket);
end Reload;

ファイル名をreload.adbで保存してgnatmake reload.adbでコンパイルできる。

ところでStringリテラルからAda.Streams.Stream_Element_Arrayに変換するのってどうやるのが一番確実なんだろう。Send_Socketに綺麗に投げる方法が思いつかなかった。