Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 138 lines (128 sloc) 4.763 kb
e290c68 @dividuum Test 'GUI' Client
authored
1 require 'socket'
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
2 require 'zlib'
3
94767cb @dividuum Mehr Ausgabe beim Verbindungsaufbau
authored
4 TCPSocket.open(ARGV[0] || 'localhost', 1234) { |socket|
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
5 class << socket
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
6 alias_method :orig_read, :read
7 attr_accessor :traffic
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
8 attr_accessor :compress
9 attr_accessor :zstream
10 attr_accessor :buf
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
11
12 def read(x)
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
13 if @compress
14 while @buf.size < x
15 @buf << @zstream.inflate(orig_read(1))
e622ccb @dividuum * Server SDL Abhaengigkeit entfernt
authored
16 @traffic += 1
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
17 end
18 ret = @buf[0...x]
19 @buf = @buf[x..-1]
20 else
21 ret = orig_read(x)
e622ccb @dividuum * Server SDL Abhaengigkeit entfernt
authored
22 @traffic += x
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
23 end
24 ret
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
25 end
26
27 def read8
28 read(1)[0]
29 end
30
31 def read16
7b89bca @dividuum Fehler in read16 korrigiert
authored
32 ret = read8
33 ret = ret & 0x7F | read8 << 7 if ret & 0x80 != 0
d7dfbd4 @dividuum - 16 (bzw jetzt nur noch 15) Bit Werte falls moeglich in einem Byte …
authored
34 ret
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
35 end
36
37 def read32
38 read(4).unpack("N")[0]
39 end
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
40
41 def readXX(len)
42 read(len).unpack("A*")[0]
43 end
44 end
45
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
46 socket.traffic = 0
47 socket.buf = ""
48 socket.compress = false
49 socket.zstream = Zlib::Inflate.new
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
50
51 Thread.start do
52 last = socket.traffic
53 loop do
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
54 print "TRAFFIC: % dbyte/sec" % [socket.traffic - last]
55 if socket.compress
56 puts " (%d => %d)" % [socket.zstream.total_in, socket.zstream.total_out]
57 else
58 puts
59 end
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
60 last = socket.traffic
61 sleep 1
62 end
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
63 end
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
64
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
65 loop do
434e74c @dividuum * Wuestensprite
authored
66 len = socket.read8
67 type = socket.read8
68 print "type=%3d len=%3d " % [type, len]
69 case type
e290c68 @dividuum Test 'GUI' Client
authored
70 when 0:
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
71 print "player upd: "
72 print "pno=%d " % socket.read8
73 print "mask=%d " % mask = socket.read8
74 print "alive=%s " % [socket.read8.zero? ? "quit" : "joined"] if mask & 1 != 0
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
75 print "name=%s " % socket.readXX(socket.read8) if mask & 2 != 0
8bfe753 @dividuum Netzwerkcode ist jetzt zukunftsfaehiger :)
authored
76 print "color=%d " % socket.read8 if mask & 4 != 0
77 print "cpu=%d " % socket.read8 if mask & 8 != 0
78 print "score=%d " % (socket.read16 - 500) if mask & 16 != 0
79 puts
e290c68 @dividuum Test 'GUI' Client
authored
80 when 1:
434e74c @dividuum * Wuestensprite
authored
81 puts "%d, %d => %d %d " % [socket.read8, socket.read8, socket.read8, socket.read8]
e290c68 @dividuum Test 'GUI' Client
authored
82 when 2:
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
83 puts "msg: %s " % socket.readXX(len)
46dc3d9 @dividuum Mehr 'GUI Client' eingebaut. Player, Scroller und World Updates funkt…
authored
84 when 3:
85 print "creature upd: "
86 print "cno=%d " % socket.read16
87 print "mask=%d " % mask = socket.read8
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
88 if mask & 1 != 0
89 print "alive=%s " % [socket.read8 == 0xFF ?
90 "dead" :
434e74c @dividuum * Wuestensprite
authored
91 "spawned %d %d,%d" % [socket.read16, socket.read16, socket.read16] ]
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
92 end
93 print "type=%d " % socket.read8 if mask & 2 != 0
94 if mask & 4 != 0
fc81e3c @dividuum Food/Health updates zusammengefasst.
authored
95 fh = socket.read8
96 print "food=%d, health=%d " % [ fh >> 4, fh & 0x0F ]
97 end
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
98 print "state=%d " % socket.read8 if mask & 8 != 0
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
99 if mask & 16 != 0
100 dx, dy = socket.read16, socket.read16
101 x = ((dx & 1) == 1 ? -1 : 1) * (dx >> 1)
102 y = ((dy & 1) == 1 ? -1 : 1) * (dy >> 1)
103 print "path=%d,%d => %d,%d " % [dx, dy, x, y]
104 end
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
105 print "target=%d " % socket.read16 if mask & 32 != 0
106 print "message=%s " % socket.readXX(socket.read8) if mask & 64 != 0
107 print "speed=%d " % socket.read8 if mask &128 != 0
46dc3d9 @dividuum Mehr 'GUI Client' eingebaut. Player, Scroller und World Updates funkt…
authored
108 puts
109 when 4:
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
110 puts "quit msg: %s " % socket.readXX(len)
46dc3d9 @dividuum Mehr 'GUI Client' eingebaut. Player, Scroller und World Updates funkt…
authored
111 break
5e2869b @dividuum Whoohoo. Funktioniert. Client und Server sind getrennt.
authored
112 when 5:
113 puts "king: %d " % socket.read8
915c46c @dividuum world info packet parsen
authored
114 when 6:
78e69c3 @dividuum * Neue Grafiken.
authored
115 puts "world info %dx%d koth: %d,%d" % [socket.read8, socket.read8, socket.read8, socket.read8]
6278250 @dividuum Smile Thought nach gewonnenem Kampf und Spawnen
authored
116 when 7:
0a76d99 @dividuum * Score und Timelimit Funktionen
authored
117 puts "smile %d" % socket.read16
118 when 8:
119 puts "game info time:%d" % socket.read32
120 when 9:
121 puts "round tick, delta=%d" % socket.read8
122 when 10:
123 puts "intermission: %s" % socket.readXX(len)
46dc3d9 @dividuum Mehr 'GUI Client' eingebaut. Player, Scroller und World Updates funkt…
authored
124 when 32:
125 socket.write("guiclient\n")
5e2869b @dividuum Whoohoo. Funktioniert. Client und Server sind getrennt.
authored
126 puts "welcome: %s" % socket.read(len).delete("\n").strip
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
127 when 254:
0a76d99 @dividuum * Score und Timelimit Funktionen
authored
128 puts "compression start"
1ea0e60 @dividuum * Deltakompression der Positionsdaten der Kreaturen.
authored
129 socket.compress = true
d7dfbd4 @dividuum - 16 (bzw jetzt nur noch 15) Bit Werte falls moeglich in einem Byte …
authored
130 when 255:
8fbd362 @dividuum Neue Pfadlogik auf dem Client. Dadurch laufen Kreaturen nicht mehr (s…
authored
131 puts "server protocol version %d" % socket.read8
e290c68 @dividuum Test 'GUI' Client
authored
132 else
db38b81 @dividuum Weltgroesse ist nicht mehr hardcodiert. Die Groesse der Serverwelt wi…
authored
133 puts "???: unknown packet type #{type}"
134 socket.readXX(len)
e290c68 @dividuum Test 'GUI' Client
authored
135 end
136 end
137 }
Something went wrong with that request. Please try again.