package Eixo::Queue::SocketPairDriver;

use strict;
use Eixo::Base::Clase;

use Socket;
use IO::Handle;
use IO::Select;

has(

	a=>undef,
	b=>undef,

	t=>undef,
);

sub DESTROY{

	close $_[0]->{t} if($_[0]->{t});
}

sub open{

	my ($a, $b);

	socketpair($a, $b, AF_UNIX, SOCK_STREAM, PF_UNSPEC);

	$a->autoflush(1);
	$b->autoflush(1);
	
	return __PACKAGE__->new(

		a=>$a,

		b=>$b,

	);
	
}

sub send{
	my ($self, $message) = @_;
	
	my $s = $self->{t};

	chomp($message);

	$message .= "\n";

	print $s $message;

}

sub receive{
	my ($self) = @_;

	my $s = $self->{t};

	my $ret = <$s>;

	$ret;
}


sub A{
	my ($self) = @_;

	close $self->{b};

	$self->__prepare($self->a);
}

sub B{
	my ($self) = @_;

	close $self->{a};

	$self->__prepare($self->b);
}

	sub __prepare{
		my ($self, $i) = @_;

		$self->{t} = $i;

	}

1;