overlook-csgo 0.2.9 → 0.3.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Rakefile +4 -0
- data/bin/benchmark +22 -0
- data/ext/fast_byte_reader/extconf.rb +4 -0
- data/ext/fast_byte_reader/fast_byte_reader.c +90 -0
- data/lib/fast_byte_reader.bundle +0 -0
- data/lib/overlook/byte_reader.rb +1 -0
- data/lib/overlook/csgo/demo/packet_handler.rb +8 -5
- data/lib/overlook/csgo/demo/parser.rb +1 -0
- data/lib/overlook/version.rb +1 -1
- data/lib/overlook.rb +2 -0
- data/overlook-csgo.gemspec +3 -0
- metadata +24 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebb21e76a090cdede06e6dee594ef17bb3fb0b06
|
4
|
+
data.tar.gz: 24ba1f70ca0140d1a3809bc2b413acacbab47733
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b478a8594315996bb718f0e8bdf458f66f5ed7658178dcdec6f4beec31bc8dc5ac969b36230d6cbd1227df909cd76e5d8f00cb699542ea3659f9dc2a3f9eef2b
|
7
|
+
data.tar.gz: a52bffacb6a71bb6e259983d1b7c9a912c6f5cf3fba47a5dc0f90e33b2e2f2601d1c06fd5b8292c3bbce13df5a8a333e1313ff456b7d1b29262955b7c4917fe7
|
data/.travis.yml
CHANGED
data/Rakefile
CHANGED
data/bin/benchmark
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'overlook'
|
5
|
+
require 'benchmark'
|
6
|
+
|
7
|
+
class Subscriber
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse
|
11
|
+
raise "give demo file as argument usage: ./bin/benchmark mydemo.dem" unless ARGV.first
|
12
|
+
@subscriber = Subscriber.new
|
13
|
+
|
14
|
+
@parser = Overlook::Csgo::Demo.open(File.open(ARGV.first))
|
15
|
+
@parser.subscribe(@subscriber)
|
16
|
+
@parser.parse
|
17
|
+
end
|
18
|
+
|
19
|
+
benchmark = Benchmark.realtime do
|
20
|
+
50.times { parse }
|
21
|
+
end
|
22
|
+
puts benchmark
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
|
3
|
+
static VALUE fast_byte_reader_initialize(VALUE fbr, VALUE io);
|
4
|
+
static VALUE fast_byte_reader_read(VALUE fbr, int len);
|
5
|
+
static VALUE fast_byte_reader_seek(VALUE fbr, VALUE pos);
|
6
|
+
static VALUE fast_byte_reader_byte(VALUE fbr);
|
7
|
+
static VALUE fast_byte_reader_var_int32(VALUE fbr);
|
8
|
+
static VALUE fast_byte_reader_eof(VALUE fbr);
|
9
|
+
static VALUE fast_byte_reader_close(VALUE fbr);
|
10
|
+
|
11
|
+
static ID id_read, id_write;
|
12
|
+
|
13
|
+
VALUE fast_byte_reader_initialize(VALUE obj, VALUE arg) {
|
14
|
+
if(rb_respond_to(arg, rb_intern("read"))) {
|
15
|
+
rb_funcall(arg, rb_intern("binmode"), 0);
|
16
|
+
rb_iv_set(obj, "@io", arg);
|
17
|
+
} else {
|
18
|
+
rb_raise(rb_eTypeError, "IO required to init FastByteReader");
|
19
|
+
}
|
20
|
+
return obj;
|
21
|
+
}
|
22
|
+
|
23
|
+
VALUE fast_byte_reader_read(VALUE obj, int len) {
|
24
|
+
VALUE io = rb_iv_get(obj, "@io");
|
25
|
+
VALUE string = rb_funcall(io, id_read, 1, len);
|
26
|
+
return string;
|
27
|
+
}
|
28
|
+
|
29
|
+
VALUE fast_byte_reader_byte(VALUE obj) {
|
30
|
+
VALUE io = rb_iv_get(obj, "@io");
|
31
|
+
VALUE string = rb_funcall(io, rb_intern("getbyte"), 0);
|
32
|
+
return string;
|
33
|
+
}
|
34
|
+
|
35
|
+
VALUE fast_byte_reader_seek(VALUE obj, VALUE pos) {
|
36
|
+
VALUE io = rb_iv_get(obj, "@io");
|
37
|
+
return rb_funcall(io, rb_intern("seek"), 2, pos, INT2FIX(1));
|
38
|
+
}
|
39
|
+
|
40
|
+
static VALUE fast_byte_reader_var_int32(VALUE fbr) {
|
41
|
+
unsigned long long int_val = 0;
|
42
|
+
unsigned shift = 0;
|
43
|
+
unsigned char byte;
|
44
|
+
unsigned int count = 0;
|
45
|
+
|
46
|
+
while (1) {
|
47
|
+
if((count + 1) == 4) {
|
48
|
+
return INT2NUM(int_val);
|
49
|
+
}
|
50
|
+
if (shift >= 64) {
|
51
|
+
rb_raise(rb_eArgError, "too many bytes when decoding varint");
|
52
|
+
}
|
53
|
+
byte = (unsigned char)NUM2INT(fast_byte_reader_byte(fbr));
|
54
|
+
int_val |= ((unsigned long long)(byte & 0x7f)) << shift;
|
55
|
+
shift += 7;
|
56
|
+
count = count + 1;
|
57
|
+
if ((byte & 0x80) == 0) {
|
58
|
+
return INT2NUM(int_val);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
VALUE fast_byte_reader_eof(VALUE obj) {
|
64
|
+
VALUE io = rb_iv_get(obj, "@io");
|
65
|
+
VALUE eof = rb_funcall(io, rb_intern("eof?"), 0);
|
66
|
+
return eof;
|
67
|
+
}
|
68
|
+
|
69
|
+
VALUE fast_byte_reader_close(VALUE obj) {
|
70
|
+
VALUE io = rb_iv_get(obj, "@io");
|
71
|
+
VALUE close = rb_funcall(io, rb_intern("close"), 0);
|
72
|
+
return close;
|
73
|
+
}
|
74
|
+
|
75
|
+
void Init_fast_byte_reader()
|
76
|
+
{
|
77
|
+
id_read = rb_intern("read");
|
78
|
+
static VALUE klass;
|
79
|
+
|
80
|
+
klass = rb_define_class("FastByteReader", rb_cObject);
|
81
|
+
|
82
|
+
rb_define_attr(klass, "io", 1, 1);
|
83
|
+
rb_define_method(klass, "initialize", fast_byte_reader_initialize, 1);
|
84
|
+
rb_define_method(klass, "read", fast_byte_reader_read, 1);
|
85
|
+
rb_define_method(klass, "byte", fast_byte_reader_byte, 0);
|
86
|
+
rb_define_method(klass, "seek", fast_byte_reader_seek, 1);
|
87
|
+
rb_define_method(klass, "var_int32", fast_byte_reader_var_int32, 0);
|
88
|
+
rb_define_method(klass, "eof?", fast_byte_reader_eof, 0);
|
89
|
+
rb_define_method(klass, "close", fast_byte_reader_close, 0);
|
90
|
+
}
|
Binary file
|
data/lib/overlook/byte_reader.rb
CHANGED
@@ -19,7 +19,7 @@ module Overlook
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def handle(packet)
|
22
|
-
reader =
|
22
|
+
reader = FastByteReader.new(packet.data)
|
23
23
|
|
24
24
|
loop do
|
25
25
|
message_type = reader.var_int32
|
@@ -27,19 +27,22 @@ module Overlook
|
|
27
27
|
|
28
28
|
handler = handlers[message_type]
|
29
29
|
if handler && handle?(handler)
|
30
|
-
handler.handle(reader.
|
30
|
+
handler.handle(reader.read(message_size))
|
31
31
|
else
|
32
|
-
reader.
|
32
|
+
reader.seek(message_size)
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
if reader.eof?
|
36
|
+
reader.close
|
37
|
+
break
|
38
|
+
end
|
36
39
|
end
|
37
40
|
end
|
38
41
|
|
39
42
|
private
|
40
43
|
|
41
44
|
def handlers
|
42
|
-
{
|
45
|
+
@handlers ||= {
|
43
46
|
::Csgo::SVC_Messages::Svc_UserMessage => UserMessageMessageHandler.new(parser),
|
44
47
|
::Csgo::SVC_Messages::Svc_GameEventList => GameEventListMessageHandler.new(parser),
|
45
48
|
::Csgo::SVC_Messages::Svc_GameEvent => GameEventMessageHandler.new(parser),
|
data/lib/overlook/version.rb
CHANGED
data/lib/overlook.rb
CHANGED
data/overlook-csgo.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
+
spec.extensions << "ext/fast_byte_reader/extconf.rb"
|
23
|
+
|
22
24
|
spec.required_ruby_version = '>= 2.3.1'
|
23
25
|
|
24
26
|
# For protobuf
|
@@ -39,4 +41,5 @@ Gem::Specification.new do |spec|
|
|
39
41
|
spec.add_development_dependency 'pry', '~> 0.10.4'
|
40
42
|
spec.add_development_dependency 'yard', '~> 0.9.5'
|
41
43
|
spec.add_development_dependency 'rubycritic', '~> 3.0'
|
44
|
+
spec.add_development_dependency 'rake-compiler'
|
42
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: overlook-csgo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taylor Finnell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: beefcake
|
@@ -150,11 +150,26 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '3.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rake-compiler
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
153
167
|
description: Ruby access to CS:GO demo files.
|
154
168
|
email:
|
155
169
|
- tmfinnell@gmail.com
|
156
170
|
executables: []
|
157
|
-
extensions:
|
171
|
+
extensions:
|
172
|
+
- ext/fast_byte_reader/extconf.rb
|
158
173
|
extra_rdoc_files: []
|
159
174
|
files:
|
160
175
|
- ".gitattributes"
|
@@ -165,8 +180,12 @@ files:
|
|
165
180
|
- LICENSE
|
166
181
|
- README.md
|
167
182
|
- Rakefile
|
183
|
+
- bin/benchmark
|
168
184
|
- bin/console
|
169
185
|
- bin/setup
|
186
|
+
- ext/fast_byte_reader/extconf.rb
|
187
|
+
- ext/fast_byte_reader/fast_byte_reader.c
|
188
|
+
- lib/fast_byte_reader.bundle
|
170
189
|
- lib/overlook.rb
|
171
190
|
- lib/overlook/bit_buffer.rb
|
172
191
|
- lib/overlook/bit_reader.rb
|
@@ -206,9 +225,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
225
|
version: 2.3.1
|
207
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
227
|
requirements:
|
209
|
-
- - "
|
228
|
+
- - ">"
|
210
229
|
- !ruby/object:Gem::Version
|
211
|
-
version:
|
230
|
+
version: 1.3.1
|
212
231
|
requirements: []
|
213
232
|
rubyforge_project:
|
214
233
|
rubygems_version: 2.5.1
|