//$ java -cp modules/cli/target/classes/';'modules/core/target/classes';'modules/parser/target/classes';'modules/demos/target/classes/ coco.smtp.Client1 package coco.smtp; import static coco.smtp.Smtp.Smtp.Smtp.C; import static coco.smtp.Smtp.Smtp.Smtp.S; import static coco.smtp.Smtp.Smtp.Smtp._220; import org.scribble.net.Buf; import org.scribble.net.scribsock.LinearSocket; import org.scribble.net.session.SSLSocketChannelWrapper; import org.scribble.net.session.MPSTEndpoint; import org.scribble.net.session.SocketChannelEndpoint; import coco.smtp.Smtp.Smtp.Smtp; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_1; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_2; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_3; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_3_Cases; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_4; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_6; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_7; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_7_Cases; import coco.smtp.Smtp.Smtp.channels.C.Smtp_C_8; import coco.smtp.Smtp.Smtp.roles.C; import coco.smtp.message.SmtpMessageFormatter; import coco.smtp.message.client.Ehlo; import coco.smtp.message.client.Quit; import coco.smtp.message.client.StartTls; import coco.smtp.message.server._250; import coco.smtp.message.server._250d; import static coco.smtp.Smtp.Smtp.Smtp.*; public class SmtpC1 { public SmtpC1() throws Exception { run(); } public static void main(String[] args) throws Exception { new SmtpC1(); } public void run() throws Exception { String host = "smtp.cc.ic.ac.uk"; int port = 25; Smtp smtp = new Smtp(); try (MPSTEndpoint<Smtp, C> se = new MPSTEndpoint<>(smtp, C, new SmtpMessageFormatter())) { se.connect(S, SocketChannelEndpoint::new, host, port); Smtp_C_1 s1 = new Smtp_C_1(se); doInit( doStartTls( doInit(s1.receive(S, _220, new Buf<>())) ) ) .send(S, new Quit()); } } private Smtp_C_4 doInit(Smtp_C_2 s2) throws Exception { Smtp_C_3 s3 = s2.send(S, new Ehlo("test")); Buf<_250> b1 = new Buf<>(); Buf<_250d> b2 = new Buf<>(); while (true) { Smtp_C_3_Cases c = s3.branch(S); switch (c.op) { case _250: return printlnBuf(c.receive(S, _250, b1), b1); case _250d: s3 = printBuf(c.receive(S, _250d, b2), b2); break; } } } private Smtp_C_8 doInit(Smtp_C_6 s6) throws Exception { Smtp_C_7 s7 = s6.send(S, new Ehlo("test")); Buf<_250> b1 = new Buf<>(); Buf<_250d> b2 = new Buf<>(); while (true) { Smtp_C_7_Cases c = s7.branch(S); switch (c.op) { case _250: return printlnBuf(c.receive(S, _250, b1), b1); case _250d: s7 = printBuf(c.receive(S, _250d, b2), b2); break; } } } private Smtp_C_6 doStartTls(Smtp_C_4 s4) throws Exception { return LinearSocket.wrapClient( s4.send(S, new StartTls()).receive(S, _220, new Buf<>()), S, SSLSocketChannelWrapper::new ); } public static <S, B extends Buf<?>> S printBuf(S s, B b) { System.out.print(b.val); return s; } public static <S, B extends Buf<?>> S printlnBuf(S s, B b) { System.out.println(b.val); return s; } }