package travel;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.scribble.net.Buf;
import org.scribble.net.ObjectStreamFormatter;
import org.scribble.net.session.MPSTEndpoint;
import org.scribble.net.session.SocketChannelEndpoint;
import travel.Travel.Booking.Booking;
import travel.Travel.Booking.channels.C.Booking_C_1;
import travel.Travel.Booking.channels.C.Booking_C_5;
import travel.Travel.Booking.roles.C;
public class BookingC
{
static int MAX = 500;
static List<String> QUERIES = IntStream.range(97, 122).mapToObj((i) -> new Character((char) i).toString()).collect(Collectors.toList());
public static void main(String[] args) throws Exception
{
Booking booking = new Booking();
try (MPSTEndpoint<Booking, C> se = new MPSTEndpoint<>(booking, Booking.C, new ObjectStreamFormatter()))
{
se.connect(Booking.A, SocketChannelEndpoint::new, "localhost", 7777);
se.connect(Booking.S, SocketChannelEndpoint::new, "localhost", 8888);
Booking_C_1 s1 = new Booking_C_1(se);
Buf<Integer> quote = new Buf<>();
Booking_C_5 s3;
for (int i = 0; ; i++)
{
if (i >= QUERIES.size())
{
s3 = s1.send(Booking.A, Booking.No);
break;
}
System.out.println("Querying: " + QUERIES.get(i));
s1 = s1.send(Booking.A, Booking.Query, QUERIES.get(i))
.receive(Booking.A, Booking.Quote, quote);
System.out.println("Quoted: " + quote.val);
if (quote.val <= MAX)
{
System.out.println("Yes: ");
s3 = s1.send(Booking.A, Booking.Yes)
.send(Booking.S, Booking.Payment, "...")
.receive(Booking.S, Booking.Ack);
break;
}
}
s3.send(Booking.A, Booking.Bye);
//foo(s1, quote);
//doQuery(s1, 0, quote).send(Booking.A, Booking.Bye);
System.out.println("End: ");
}
}
/*private static void foo(Booking_C_1 s1, Buf<Integer> buf) throws Exception
{
for (int i = 0; i < QUERIES.size(); i++) // Stream.forEach not suitable due to Exceptions
{
System.out.println("Querying: " + QUERIES.get(i));
s1 = s1.send(Booking.A, Booking.Query, QUERIES.get(i))
.receive(Booking.A, Booking.Quote, buf);
System.out.println("Quoted: " + buf.val);
if (buf.val <= MAX)
{
System.out.println("Yes: ");
s1.send(Booking.A, Booking.Yes)
.send(Booking.S, Booking.Payment, "...")
.receive(Booking.S, Booking.Ack)
.send(Booking.A, Booking.Bye);
return;
}
}
s1.send(Booking.A, Booking.No).send(Booking.A, Booking.Bye);
}*/
private static Booking_C_5 doQuery(Booking_C_1 s1, int i, Buf<Integer> buf) throws Exception
{
return (i >= QUERIES.size())
? s1.send(Booking.A, Booking.No)
//: foo3(s1.send(Booking.A, Booking.Query, println(QUERIES.get(i), QUERIES.get(i))).receive(Booking.Quote, QUOTE), i, println(QUOTE.val, Integer.toString(QUOTE.val)));
: checkMax(s1.send(Booking.A, Booking.Query, QUERIES.get(i))
.receive(Booking.A, Booking.Quote, buf)
, i, buf);
}
private static Booking_C_5 checkMax(Booking_C_1 s1, int i, Buf<Integer> buf) throws Exception
{
return (buf.val <= MAX)
? s1.send(Booking.A, Booking.Yes)
.send(Booking.S, Booking.Payment, "...")
.receive(Booking.S, Booking.Ack)
: doQuery(s1, i + 1, buf);
}
/*private static <T> T println(T t, String m)
{
System.out.println(m);
return t;
}*/
/*static Optional<Integer> opt;
private static Booking_C_1 foo2(Booking_C_1 s1, int i) throws Exception
{
return (i >= QUERIES.size())
? ((opt = foo3(s1.send(Booking.A, Booking.Query, QUERIES.get(i)).receive(Booking.Quote, QUOTE), QUOTE.val)).isPresent())
? null
: null
: s1.send(, op);;
/*if (QUOTE.val <= MAX)
{
s1.send(Booking.A, Booking.Yes).send(Booking.S, Booking.Payment, "...").receive(Booking.Ack);
}
else
{
if ()
}* /
}
private static Optional<Integer> foo3(Booking_C_1 s1, int quote) throws Exception
{
return (quote <= MAX)
? Optional.of(quote)
: Optional.empty();
}*/
}