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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87a7cd83f7ad143ebf6ce47b5cf32fb9e43769f0
4
- data.tar.gz: 37b4c303d2e4c3893f3b81eb7ebd581464c18d81
3
+ metadata.gz: ebb21e76a090cdede06e6dee594ef17bb3fb0b06
4
+ data.tar.gz: 24ba1f70ca0140d1a3809bc2b413acacbab47733
5
5
  SHA512:
6
- metadata.gz: 30216334445101d00fbb60ab18b8e0edc4db471cab11fbfc6e0152311f298c73045c5383d28b720a0c9471d0aac05affbeaf6e59dd41df8fc19c875b60fbc8eb
7
- data.tar.gz: 59c971f5ebb5069d6eefcc7217225d16a861637f5dacb1bdf06016c24f8008ec799823544abf67a516f6d04c11ddd05ff2b8d61a8892683803d2a741703d647e
6
+ metadata.gz: b478a8594315996bb718f0e8bdf458f66f5ed7658178dcdec6f4beec31bc8dc5ac969b36230d6cbd1227df909cd76e5d8f00cb699542ea3659f9dc2a3f9eef2b
7
+ data.tar.gz: a52bffacb6a71bb6e259983d1b7c9a912c6f5cf3fba47a5dc0f90e33b2e2f2601d1c06fd5b8292c3bbce13df5a8a333e1313ff456b7d1b29262955b7c4917fe7
data/.travis.yml CHANGED
@@ -17,4 +17,4 @@ before_install:
17
17
  - git-lfs/bin/git-lfs pull | cat
18
18
  install:
19
19
  - bundle
20
- script: rake spec:all
20
+ script: rake compile && rake spec:all
data/Rakefile CHANGED
@@ -6,3 +6,7 @@ load './lib/tasks/spec.rake'
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  task default: 'spec:fast'
9
+
10
+ require 'rake/extensiontask'
11
+ spec = Gem::Specification.load('overlook-csgo.gemspec')
12
+ Rake::ExtensionTask.new('fast_byte_reader', spec)
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,4 @@
1
+ require 'mkmf'
2
+ extension_name = 'fast_byte_reader'
3
+ dir_config(extension_name)
4
+ create_makefile(extension_name)
@@ -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
@@ -54,5 +54,6 @@ module Overlook
54
54
  def_delegator :@io, :read, :read
55
55
  def_delegator :@io, :tell, :tell
56
56
  def_delegator :@io, :lineno, :lineno
57
+ def_delegator :@io, :close, :close
57
58
  end
58
59
  end
@@ -19,7 +19,7 @@ module Overlook
19
19
  end
20
20
 
21
21
  def handle(packet)
22
- reader = BitReader.new(packet.data)
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.bytes(message_size))
30
+ handler.handle(reader.read(message_size))
31
31
  else
32
- reader.skip(message_size)
32
+ reader.seek(message_size)
33
33
  end
34
34
 
35
- break if reader.eof?
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),
@@ -39,6 +39,7 @@ module Overlook
39
39
 
40
40
  def done
41
41
  emit(:done)
42
+ @reader.close
42
43
  true
43
44
  end
44
45
 
@@ -1,3 +1,3 @@
1
1
  module Overlook
2
- VERSION = '0.2.9'.freeze
2
+ VERSION = '0.3.0.pre1'.freeze
3
3
  end
data/lib/overlook.rb CHANGED
@@ -9,6 +9,8 @@ require 'overlook/bit_buffer'
9
9
  require 'overlook/bit_reader'
10
10
  require 'overlook/byte_reader'
11
11
 
12
+ require 'fast_byte_reader'
13
+
12
14
  module Overlook
13
15
  def self.decode_share_code(code)
14
16
  decoder = Csgo::SharecodeDecoder.new(code)
@@ -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.2.9
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: 2016-11-26 00:00:00.000000000 Z
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: '0'
230
+ version: 1.3.1
212
231
  requirements: []
213
232
  rubyforge_project:
214
233
  rubygems_version: 2.5.1