I want to create a Client, which receives and handles received data in background while the Client can send via the same socket.

My first idea was something like this:
class Client {
        private Socket socket;
        private Tid receiverTid;

        this(Socket socket) {
                this.socket = socket;
                this.receiverTid = spawn( &receiver, this.socket );
        }
        
        void command(Command[] cmd) {
                this.socket.send(cmd.makeMessage());
        }
}

void receiver(Socket socket) {
        /*..*/
}
..how naive of me :)

The compiler says: "Error: static assert: "Aliases to mutable thread-local data not allowed." The documentation for spawn() states: "all arguments to fn must either be shared or immutable or have no pointer indirection."

So, now i am thinking about to create a instance of Socket inside the spawned worker and do send and receive via Message Passing between Client and the worker.

But, is there another way?
I am writing lot of golang lately and i am sure something like `go receive(&socket)` would be valid. Now, i am wondering if there is a similar simple way to do it in dlang.


Reply via email to