overlook-csgo 0.2.9 → 0.3.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|