view test/chatclient.d @ 13:8c9b1276f623 default tip

bug fixes
author rick@minifunk
date Sat, 20 Sep 2008 18:33:11 -0400
parents d6a3cfe7c3de
children
line wrap: on
line source


module chatclient;

import tango.io.Stdout;
import tango.io.Console;
import tango.net.Socket;
import tango.util.log.Log;

import dreactor.core.Vat;
import dreactor.core.Task;
import dreactor.protocol.TcpProvider;
import dreactor.util.Emitter;

enum { StdinReceive = 42 }

Logger log;

class ChatTask : Task
{

private
    TcpProvider client;
    bool running;
public
    this(TcpProvider tcpclient) 
    {
        super(tcpclient);
    }

    void run()
    {
        Message msg;
        running = true;
        auto em = new Emitter(this, 
                {
                     char buf[] = Cin.copyln(true);
                     return Message(cast(void*)buf.ptr, StdinReceive, buf.length);
                });
        
        while (running)
        {
            msg = receive();
            switch (msg.type)
            {
                case StdinReceive:
                {
                    char[] inbuf = getString(msg);
                    if (inbuf == "quit")
                    {
                        running = false;
                    }
                    client.send(inbuf);
                }
                case TcpProvider.Receive:
                {
                    Stdout(getString(msg));
                }
                default:
                    Stdout("unknown msg received: {}", msg.type);
            }
        }
        em.stopNow();
    }
}


int main(char[][] args)
{
    log = Log.lookup("dreactor.chatserver");
    auto provider = new TcpProvider(new IPv4Address("localhost", 5555));
    auto tsk = new ChatTask(provider);
    return 0;
}