Skip to content
  • 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());
    	}
    }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment