Help with Concurrency

2015-11-03 Thread bertg via Digitalmars-d-learn

I am having trouble with a simple use of concurrency.

Running the following code I get 3 different tid's, multiple 
"sock in" messages printed, but no receives. I am supposed to get 
a "received!" for each "sock in", but I am getting hung up on 
"receiving...".


Am I misusing or misunderstanding the use of mailboxes?

===

class Connection {
Reactor reactor;
WebSocket webSocket;

this(Reactor r, WebSocket ws)
{
reactor = r;
webSocket = ws;

messageLoop();
}

void messageLoop()
{
std.concurrency.Tid tid = std.concurrency.thisTid();
writeln("tid 1 ~ " ~ 
to!string(std.concurrency.thisTid()));
writeln("tid 2 ~ " ~ 
to!string(std.concurrency.thisTid()));
writeln("tid 3 ~ " ~ 
to!string(std.concurrency.thisTid()));


// deal with websocket messages
spawn(&handleConnectionWebSocket, tid, cast(shared) 
webSocket);

// deal with pub/sub
//spawn();

while (true) {
writeln("receiving...");
std.concurrency.receive(
(string msg) {
writeln("conn: received ws message: " ~ msg);
}
);
writeln("received!");
}
}
}
void handleConnectionWebSocket(std.concurrency.Tid caller, shared 
WebSocket ws)

{
auto sock = cast(WebSocket) ws;
while (sock.connected) {
writeln("sock in");
auto msgIn = sock.receiveText();
std.concurrency.send(caller, msgIn);
}
}


Re: Help with Concurrency

2015-11-03 Thread bertg via Digitalmars-d-learn
On Wednesday, 4 November 2015 at 01:27:57 UTC, Nicholas Wilson 
wrote:

On Tuesday, 3 November 2015 at 23:16:59 UTC, bertg wrote:

[...]
Try replacing the following loop to have a receive that times 
out or while(true) to while(web socked.connected)

[...]


That didn't solve the problem. How would that solve the problem?

std.concurrency.receive does not have a timeout either.