package SockJS::Transport;

use strict;
use warnings;

use SockJS::Transport::EventSource;
use SockJS::Transport::HtmlFile;
use SockJS::Transport::WebSocket;
use SockJS::Transport::XHRPolling;
use SockJS::Transport::XHRSend;
use SockJS::Transport::XHRStreaming;
use SockJS::Transport::JSONPPolling;
use SockJS::Transport::JSONPSend;

sub build {
    my $self = shift;
    my $path = shift;

    my $class;

    if ($path eq 'xhr') {
        $class = 'XHRPolling';
    }
    elsif ($path eq 'xhr_send') {
        $class = 'XHRSend';
    }
    elsif ($path eq 'xhr_streaming') {
        $class = 'XHRStreaming';
    }
    if ($path eq 'jsonp') {
        $class = 'JSONPPolling';
    }
    elsif ($path eq 'jsonp_send') {
        $class = 'JSONPSend';
    }
    elsif ($path eq 'websocket' || $path eq 'raw_websocket') {
        $class = 'WebSocket';
    }
    elsif ($path eq 'eventsource') {
        $class = 'EventSource';
    }
    elsif ($path eq 'htmlfile') {
        $class = 'HtmlFile';
    }

    return unless $class;

    $class = "SockJS::Transport::$class";

    return $class->new(name => $path, @_);
}

1;