-
D:
import std.socket, std.experimental.logger; class UDSIPC { private: static immutable string socketAddress = "\0/tmp/com.localserver.myapp"; static immutable size_t messageBufferSize = 64; static immutable string socketAddressName = "\0/tmp/com.localserver.myapp"; Socket socket; UnixAddress uaddr; public: this(in string socketAddressName = socketAddressName) { socket = new Socket(AddressFamily.UNIX, SocketType.STREAM); uaddr = new UnixAddress(socketAddress); } bool getUniqueness() { bool result; scope (success) log("returns: ", result); try { socket.bind(uaddr); result = true; } catch (SocketOSException e) result = false; // else throw error return result; } string getMessage() { socket.listen(0); auto receiverSocket = socket.accept(); char[messageBufferSize] buffer; auto amount = receiverSocket.receive(buffer); import std.string; return format!"%s"(buffer[0 .. amount]); } void sendMessage(in string message) { socket.connect(uaddr); socket.send(message); } } void main() { auto ipc = new UDSIPC(); if (ipc.getUniqueness()) { while (true) { log(ipc.getMessage()); } } else { import std.stdio, std.string; ipc.sendMessage(readln().chomp()); } }
Please register or sign in to comment