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 }