root/trunk/raknet/lineserver.d

Revision 32, 2.9 kB (checked in by clayasaurus, 3 years ago)

updated raknet to include more functionality

Line 
1 // line server code
2 import raknet.server,
3        raknet.bitstream;
4
5 import std.string;
6 import std.stdio;
7 import std.c.time;
8
9 // packet identifier so we know packet is a line
10 const ubyte PACKET_ID_LINE = 100;
11 const ubyte PACKET_ID_NUM = 101;
12 const ubyte PACKET_ID_NUM_REQUEST = 102;
13
14 int num = 0;
15
16 void sendLineToClients(PlayerID clientToExclude, float x1, float y1, float x2, float y2, int r, int g, int b)
17 {
18    // allocates bitstream
19    raknet.bitstream.start();     
20  
21    raknet.bitstream.write(PACKET_ID_LINE);
22    raknet.bitstream.write(x1);
23    raknet.bitstream.write(y1);
24    raknet.bitstream.write(x2);
25    raknet.bitstream.write(y2);
26    raknet.bitstream.write(r);
27    raknet.bitstream.write(g);
28    raknet.bitstream.write(b);
29
30    raknet.server.sendBitstream(PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, 0, clientToExclude, true);
31
32    // deallocates bitstream
33    raknet.bitstream.end();
34 }
35
36 void sendNumToClients(PlayerID pid, int num)
37 {
38    // allocates bitstream
39    raknet.bitstream.start();     
40  
41    // send info & packet ID
42    raknet.bitstream.write(PACKET_ID_NUM);
43    raknet.bitstream.write(num);
44
45    raknet.server.sendBitstream(PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, 0, pid, false);
46
47    // deallocates bitstream
48    raknet.bitstream.end();
49 }
50
51 void handlePacket(Packet * p)
52 {
53    ubyte packetID;
54    
55    // allocate bitstream
56    raknet.bitstream.start(cast(char*)p.data, p.length, false);
57
58    raknet.bitstream.read(packetID);   
59    
60    switch(packetID) {
61    case PACKET_ID_LINE:
62       float x1, y1, x2, y2;
63       int r, g, b;
64
65       raknet.bitstream.read(x1);
66       raknet.bitstream.read(y1);
67       raknet.bitstream.read(x2);
68       raknet.bitstream.read(y2);
69       raknet.bitstream.read(r);
70       raknet.bitstream.read(g);
71       raknet.bitstream.read(b);
72      
73       sendLineToClients(p.playerId, x1, y1, x2, y2, r, g, b);
74    break;
75
76    // on incoming connection tell player which number it is
77    case ID_NEW_INCOMING_CONNECTION:
78       debug writefln("player ", p.playerIndex, " connected");
79
80       sendNumToClients(p.playerId, p.playerIndex);
81    break;
82
83
84    default:
85       printf("Unhandled packet (not a problem): %i\n", cast(int)packetID);
86    }
87
88    // deallocate bitstream
89    raknet.bitstream.end();
90 }
91
92 int main()
93 {
94    raknet.server.initialize();
95
96    Packet * packet = null;
97    
98    int port = 6881;
99
100    if(raknet.server.start(32, 0, 0, port))
101    {
102       printf("Server started successfully.\n");
103       printf("Server is now listening on port %i.\n\n", port);
104       printf("^C to close server.\n");
105    }
106    else
107    {
108       printf("There was an error starting the server.");     
109       return 0;
110    }
111
112    while(true)
113    {
114       packet = raknet.server.receivePacket();
115      
116       if(packet !is null) {
117          handlePacket(packet);
118          
119          raknet.server.deallocatePacket(packet);
120       }
121    }
122
123     raknet.server.disconnect(300);
124     raknet.server.destroy();
125        
126     printf("Server closed successfully.\n");
127        
128    return 0;
129 }
Note: See TracBrowser for help on using the browser.