1 /**
2 Copyright: Copyright (c) 2014 Andrey Penechko.
3 License: a$(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0).
4 Authors: Andrey Penechko.
5 */
6 
7 module baseclient;
8 
9 import core.thread;
10 import std.conv : to;
11 import std.stdio : writefln, writeln;
12 import std.string : format, toStringz;
13 
14 import derelict.enet.enet;
15 
16 import connection;
17 
18 abstract class BaseClient : Connection
19 {
20 	ENetAddress serverAddress;
21 	ENetPeer* server;
22 
23 	void connect(string address, ushort port)
24 	{
25 		enet_address_set_host(&serverAddress, address.toStringz);
26 		serverAddress.port = port;
27 
28 		server = enet_host_connect(host, &serverAddress, 2, 42);
29 		enet_peer_timeout(server, 0, 0, 5000);
30 
31 		if (server is null)
32 		{
33 			writeln("An error occured while trying to create an ENet server peer");
34 			return;
35 		}
36 	}
37 
38 	void disconnnect()
39 	{
40 		enet_peer_disconnect(server, 0);
41 	}
42 
43 	void send(ubyte[] data, ubyte channel = 0)
44 	{
45 		ENetPacket* packet = enet_packet_create(data.ptr, data.length,
46 				ENET_PACKET_FLAG_RELIABLE);
47 		enet_peer_send(server, channel, packet);
48 	}
49 
50 	void send(P)(auto ref const(P) packet, ubyte channel = 0)
51 		if (is(P == struct))
52 	{
53 		send(createPacket(packet), channel);
54 	}
55 }