1 /*
2  * Client demo.
3  * Connects to server in demo/server.d to port 2525
4  * Reads line from stdin, sends to server, outputs messages received to stdout
5  */
6 
7 module client;
8 
9 version(clientdemo){
10 	import networkd;
11 	import std.stdio;
12 	
13 	void main(){
14 		Node client = new Node();
15 		// generate keys, we want it encrypted
16 		writeln("generating keys, takes time... ");
17 		client.generateKeys(1024);
18 		writeln("done");
19 		// stores the ID of the connection with server
20 		uint serverConnectionID;
21 		// connect with server
22 		serverConnectionID = cast(uint)client.newConnection("localhost", 2525);
23 		writeln("sending key... ");
24 		if (client.sendKey(serverConnectionID)){
25 			writeln("done");
26 		}else{
27 			writeln("failed");
28 		}
29 		// start sending each line, and write received message back
30 		bool isRunning = true;
31 		while (isRunning){
32 			string line = readln;
33 			// remove trailing \n:
34 			line.length --;
35 			// send
36 			bool sentOk = client.sendMessage(serverConnectionID, cast(char[])line);
37 			if (sentOk){
38 				writeln("message sent, waiting for reply...");
39 			}else{
40 				writeln("failed to send message to server");
41 				break;
42 			}
43 			// receive
44 			NetEvent[] events = client.getEvent();
45 			foreach (event; events){
46 				if (event.type == NetEvent.Type.MessageEvent){
47 					if (event.encrypted){
48 						write("(encrypted) ");
49 					}
50 					writeln("server: ",event.getEventData!(NetEvent.Type.MessageEvent));
51 				}else if (event.type == NetEvent.Type.ConnectionClosed){
52 					writeln("Server closed the connection");
53 					isRunning = false;
54 					break;
55 				}
56 			}
57 		}
58 		.destroy(client);
59 	}
60 }