NAME
    Dancer::Plugin::WebSocket - A Dancer plugin for easily creating
    WebSocket apps

VERSION
    version 0.0001

SYNOPSIS
        # ./bin/app.pl
        use Dancer;
        use Dancer::Plugin::WebSocket;

        get '/' => sub { template 'index' };

        any '/send_msg' => sub {
            my $msg = params->{msg};
            websocket_send($msg);
            return "sent $msg\n";
        };

        dance;

        # ./views/index.tt
        <html>
        <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script>
        var socket;
        $(function() {
            // ws_path should be of the form ws://host/_hippie/ws
            var ws_path = "ws:<% request.base.opaque %>_hippie/ws";
            socket = new WebSocket(ws_path);
            socket.onopen = function() {
                $('#connection-status').text("Connected");
            };
            socket.onmessage = function(e) {
                var data = JSON.parse(e.data);
                if (data.msg)
                    alert (data.msg);
            };
        });
        function send_msg(message) {
            socket.send(JSON.stringify({ msg: message }));
        }
        </script>
        </head>
        <body>
        Connection Status: <span id="connection-status"> Disconnected </span>
        <input value="Send Message" type=button onclick="send_msg('hello')" />
        </body>
        </html>

        # Run app with Twiggy
        plackup -s Twiggy bin/app.pl

        # Visit http://localhost:5000 and click the button or interact via curl:
        curl http://localhost:5000/send_msg?msg=hello

DESCRIPTION
    This plugin provides the keyword websocket_send, which takes 1 argument,
    the message to send to the websocket. This plugin is built on top of
    Web::Hippie, but it abstracts that out for you. You should be aware that
    it registers 2 routes that Web::Hippie needs: get('/new_listener') and
    get('/message'). Be careful to not define those routes in your app. This
    requires that you have Plack and Web::Hippie installed. It also requires
    that you run your app via Twiggy. I'm not sure why. For example:

        plackup -s Twiggy bin/app.pl

AUTHORS
    *   Naveed Massjouni <naveedm9@gmail.com>

    *   Franck Cuny <franck@lumberjaph.net>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2010 by Naveed Massjouni.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.