//$ java -cp modules/cli/target/classes/';'modules/core/target/classes';'modules/parser/target/classes';'modules/demos/target/classes/ coco.smtp.Client 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 static coco.smtp.Smtp.Smtp.Smtp._250; import static coco.smtp.Smtp.Smtp.Smtp._250d; 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.ioifaces.Branch_C_S_250__S_250d; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Case_C_S_250__S_250d; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Out_S_Ehlo; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Receive_C_S_220; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Select_C_S_Ehlo; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Select_C_S_Quit; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Select_C_S_StartTls; import coco.smtp.Smtp.Smtp.channels.C.ioifaces.Succ_In_S_250; 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; public class MySmtpC { public MySmtpC() throws Exception { run(); } public static void main(String[] args) throws Exception { new MySmtpC(); } 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( LinearSocket.wrapClient( doInit(s1.receive(S, _220, new Buf<>())) .to(Select_C_S_StartTls.cast) // Run-time cast .send(S, new StartTls()) .to(Receive_C_S_220.cast) // Safe cast .receive(S, _220, new Buf<>()) .to(Select_C_S_Ehlo.cast) // Safe cast , S, SSLSocketChannelWrapper::new) ) .to(Select_C_S_Quit.cast) // Run-time cast .send(S, new Quit()); } } //* private Succ_In_S_250 doInit(Out_S_Ehlo<?> s) throws Exception { // TODO: ... return null; } /*/ private Succ_In_S_250 doInit(Select_C_S_Ehlo<?> s) throws Exception { Branch_C_S_250__S_250d<?, ?> b = s.send(S, new Ehlo("test")) .to(Branch_C_S_250__S_250d.cast); // Safe cast Buf<_250> b1 = new Buf<>(); Buf<_250d> b2 = new Buf<>(); while (true) { Case_C_S_250__S_250d<?, ?> c = b.branch(S); switch (c.getOp()) { case _250: return Client1.printlnBuf(c.receive(S, _250, b1), b1); case _250d: b = Client1.printBuf( c.receive(S, _250d, b2) .to(Branch_C_S_250__S_250d.cast) // Safe cast , b2); break; } } } //*/ }