ease_engine 0.0.19
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 +7 -0
- data/.gitignore +25 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +33 -0
- data/Rakefile +1 -0
- data/benchmark/echo/echo_client.rb +90 -0
- data/benchmark/echo/echo_packet.rb +9 -0
- data/benchmark/echo/echo_server.rb +48 -0
- data/benchmark/fps.rb +23 -0
- data/benchmark/http.rb +9 -0
- data/benchmark/loop/Makefile +39 -0
- data/benchmark/loop/Makefile.rb +11 -0
- data/benchmark/loop/Rakefile +42 -0
- data/benchmark/loop/loop.c +38 -0
- data/benchmark/loop/loop.cs +33 -0
- data/benchmark/loop/loop.go +33 -0
- data/benchmark/loop/loop.js +23 -0
- data/benchmark/loop/loop.php +22 -0
- data/benchmark/loop/loop.rb +19 -0
- data/benchmark/loop/loop.scala +30 -0
- data/benchmark/loop/loop_c +0 -0
- data/benchmark/loop/loop_cs +0 -0
- data/benchmark/loop/loop_go +0 -0
- data/benchmark/measure/measure_client.rb +76 -0
- data/benchmark/measure/measure_server.rb +47 -0
- data/benchmark/process.rb +3 -0
- data/benchmark/tcp/tcp_client.rb +45 -0
- data/benchmark/tcp/tcp_server.rb +40 -0
- data/benchmark/udp/udp_client.rb +84 -0
- data/benchmark/udp/udp_packet.rb +40 -0
- data/benchmark/udp/udp_server.rb +33 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/ease_engine.gemspec +27 -0
- data/lib/ease_engine.rb +35 -0
- data/lib/ease_engine/application.rb +269 -0
- data/lib/ease_engine/buffer.rb +25 -0
- data/lib/ease_engine/data.rb +158 -0
- data/lib/ease_engine/frame.rb +38 -0
- data/lib/ease_engine/http.rb +42 -0
- data/lib/ease_engine/log.rb +109 -0
- data/lib/ease_engine/measure.rb +25 -0
- data/lib/ease_engine/packet.rb +150 -0
- data/lib/ease_engine/platform.rb +19 -0
- data/lib/ease_engine/process.rb +31 -0
- data/lib/ease_engine/socket.rb +174 -0
- data/lib/ease_engine/time.rb +22 -0
- data/lib/ease_engine/timer.rb +72 -0
- data/lib/ease_engine/version.rb +3 -0
- data/lib/ease_engine/watcher.rb +95 -0
- data/types/Rakefile +83 -0
- data/types/csharp/EaseEngine.cs +39 -0
- data/types/csharp/EaseEngine/Buffer.cs +49 -0
- data/types/csharp/EaseEngine/Measure.cs +47 -0
- data/types/csharp/EaseEngine/Time.cs +41 -0
- data/types/csharp/EaseEngine/Version.cs +7 -0
- data/types/csharp/Unity/Assets/Menu.cs +56 -0
- data/types/csharp/Unity/Assets/Menu.unity +0 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f43c77e968948ba8cfaf51290acdce0be838f49a
|
4
|
+
data.tar.gz: 179eaeba3961541f2aae7e60ac0f0aa38f4ebca6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ff6ac2038a1e486e41914acfb0e7f187189908cbaadcfff7b0a33b61a6653de27bbfe7ea4a84430f16f44309806bfdfe0caa4340840457f2ad8345621ce4f96a
|
7
|
+
data.tar.gz: a941ca8a98d4530e1c34838e6f0f90f67d41700034e60f8d2a275043fc34c030a56b46f6e37636c9bf32828708bb3a13f690d2bc471129cb567ee444e6c2c95e
|
data/.gitignore
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
/benchmark/loop/loop
|
11
|
+
/benchmark/loop/*.o
|
12
|
+
/benchmark/loop/obj
|
13
|
+
/benchmark/loop/*.exe
|
14
|
+
/benchmark/loop/*.class
|
15
|
+
/benchmark/loop/node_modules
|
16
|
+
*.log
|
17
|
+
*.pid
|
18
|
+
*.dll
|
19
|
+
*.meta
|
20
|
+
/types/csharp/Unity/*.csproj
|
21
|
+
/types/csharp/Unity/*.sln
|
22
|
+
/types/csharp/Unity/*.userprefs
|
23
|
+
/types/csharp/Unity/Library
|
24
|
+
/types/csharp/Unity/ProjectSettings
|
25
|
+
/types/csharp/Unity/Temp
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# EaseEngine
|
2
|
+
|
3
|
+
Easy application programming scripts.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'ease_engine'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install ease_engine
|
20
|
+
|
21
|
+
## Development
|
22
|
+
|
23
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
24
|
+
|
25
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
26
|
+
|
27
|
+
## Contributing
|
28
|
+
|
29
|
+
1. Fork it ( https://github.com/[my-github-username]/ease_engine/fork )
|
30
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
31
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
32
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
33
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "ease_engine"
|
2
|
+
require "./echo_packet"
|
3
|
+
|
4
|
+
class BenchmarkApplication < EaseEngine::Application
|
5
|
+
def on_start
|
6
|
+
super
|
7
|
+
|
8
|
+
EaseEngine::Frame.fps = 60
|
9
|
+
|
10
|
+
host = ARGV[ 0 ]
|
11
|
+
port = ARGV[ 1 ].to_i
|
12
|
+
@tcp_num = ARGV[ 2 ].to_i
|
13
|
+
@udp_num = ARGV[ 3 ].to_i
|
14
|
+
|
15
|
+
@tcp_packet = EchoPacket.new
|
16
|
+
@tcp_packet.str = "0123456789ABCDEF" * 32 # 512
|
17
|
+
# @tcp_packet.str = "0123456789ABCDEF" * 128 # 2048
|
18
|
+
# @tcp_packet.str = "0123456789ABCDEF" * 4096 # 64KB
|
19
|
+
|
20
|
+
@udp_packet = EchoPacket.new
|
21
|
+
@udp_packet.str = "0123456789ABCDEF" * 32 # 512
|
22
|
+
|
23
|
+
@tcp_len = @tcp_packet.str.length
|
24
|
+
@udp_len = @udp_packet.str.length
|
25
|
+
EE_LOG_DBG.call "tcp_len=#{@tcp_len} udp_len=#{@udp_len}"
|
26
|
+
|
27
|
+
@tcp_num.times{|i|
|
28
|
+
tcp_socket = EaseEngine::TCPSocket.new( host, port )
|
29
|
+
# EE_LOG_DBG.call "tcp_num=#{i + 1}"
|
30
|
+
add_connect_socket( tcp_socket )
|
31
|
+
}
|
32
|
+
|
33
|
+
@udp_num.times{|i|
|
34
|
+
udp_socket = EaseEngine::UDPSocket.new
|
35
|
+
# EE_LOG_DBG.call "udp_num=#{i + 1}"
|
36
|
+
add_socket( udp_socket )
|
37
|
+
write_packet( udp_socket, @udp_packet, 0, host, port )
|
38
|
+
}
|
39
|
+
|
40
|
+
@measure.check
|
41
|
+
EE_LOG_DBG.call "host=#{host} port=#{port} tcp_num=#{@tcp_num} udp_num=#{@udp_num} watcher.size=#{@watcher.size} update_usec=#{@measure.update_usec}"
|
42
|
+
@measure.start
|
43
|
+
|
44
|
+
@is_update = ( 0 < @watcher.size )
|
45
|
+
|
46
|
+
@measure_read_socket = EaseEngine::Measure.new
|
47
|
+
end
|
48
|
+
|
49
|
+
def on_update
|
50
|
+
if 1000000 <= @measure.check
|
51
|
+
EE_LOG_DBG.call "tcp_num=#{@tcp_num} udp_num=#{@udp_num} watcher.size=#{@watcher.size} update_usec=#{@measure.update_usec} count=#{@measure.count}"
|
52
|
+
|
53
|
+
@measure.start
|
54
|
+
@is_update = ( 0 < @watcher.size )
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def on_end
|
59
|
+
super
|
60
|
+
|
61
|
+
@measure_read_socket.check
|
62
|
+
EE_LOG_DBG.call "update_usec=#{@measure_read_socket.update_usec}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def on_connected_socket( socket )
|
66
|
+
write_packet( socket, @tcp_packet, 0 )
|
67
|
+
end
|
68
|
+
|
69
|
+
def on_read_socket( socket, packet )
|
70
|
+
send( "on_#{packet.packet_name.gsub( /\./, '_' )}", socket, packet )
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_EchoPacket( socket, packet )
|
74
|
+
if socket.kind_of?( EaseEngine::TCPSocket )
|
75
|
+
@tcp_num -= 1
|
76
|
+
else
|
77
|
+
@udp_num -= 1
|
78
|
+
end
|
79
|
+
|
80
|
+
len = packet.str.length
|
81
|
+
if @tcp_len != len && @udp_len != len
|
82
|
+
EE_LOG_ERR.call "Packet Error len=#{len}"
|
83
|
+
@is_update = false
|
84
|
+
end
|
85
|
+
remove_socket( socket )
|
86
|
+
|
87
|
+
@is_update = false if 0 == @watcher.size
|
88
|
+
end
|
89
|
+
end
|
90
|
+
BenchmarkApplication::run
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "ease_engine"
|
2
|
+
require "./echo_packet"
|
3
|
+
|
4
|
+
class BenchmarkApplication < EaseEngine::Application
|
5
|
+
def on_start
|
6
|
+
super
|
7
|
+
|
8
|
+
@is_update = true
|
9
|
+
EaseEngine::Frame.fps = 60
|
10
|
+
|
11
|
+
host = ARGV[ 0 ]
|
12
|
+
port = ARGV[ 1 ].to_i
|
13
|
+
backlog = ARGV[ 2 ].to_i
|
14
|
+
backlog = Socket::Constants::SOMAXCONN if backlog <= 0
|
15
|
+
|
16
|
+
@tcp_socket = EaseEngine::TCPServer.new( host, port )
|
17
|
+
@tcp_socket.listen( backlog )
|
18
|
+
add_server_socket( @tcp_socket )
|
19
|
+
|
20
|
+
@udp_socket = EaseEngine::UDPSocket.new
|
21
|
+
@udp_socket.bind( host, port )
|
22
|
+
add_socket( @udp_socket )
|
23
|
+
|
24
|
+
EE_LOG_DBG.call "host=#{host} port=#{port} backlog=#{backlog} Socket::Constants::SOMAXCONN=#{Socket::Constants::SOMAXCONN}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def on_update
|
28
|
+
if 1000000 <= @measure.check
|
29
|
+
EE_LOG_DBG.call "watcher.size=#{@watcher.size} update_usec=#{@measure.update_usec} count=#{@measure.count}"
|
30
|
+
|
31
|
+
@measure.start
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def on_read_socket( socket, packet )
|
36
|
+
write_packet( socket, packet, 0 )
|
37
|
+
end
|
38
|
+
|
39
|
+
def on_close_socket( socket )
|
40
|
+
case socket
|
41
|
+
when @tcp_socket
|
42
|
+
EE_LOG_DBG.call "on_close_socket #{socket}"
|
43
|
+
when @udp_socket
|
44
|
+
EE_LOG_DBG.call "on_close_socket #{socket}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
BenchmarkApplication::run
|
data/benchmark/fps.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "ease_engine"
|
2
|
+
|
3
|
+
class BenchmarkApplication < EaseEngine::Application
|
4
|
+
def on_start
|
5
|
+
super
|
6
|
+
|
7
|
+
@is_update = true
|
8
|
+
EaseEngine::Frame.fps = ARGV[ 0 ].to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
def on_update
|
12
|
+
if 1000000 <= @measure.check
|
13
|
+
@is_update = false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def on_end
|
18
|
+
super
|
19
|
+
|
20
|
+
EE_LOG_DBG.call "fps=#{EaseEngine::Frame.fps} update_usec=#{@measure.update_usec} count=#{@measure.count}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
BenchmarkApplication::run
|
data/benchmark/http.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
COMPILER = gcc
|
2
|
+
override COMPILE_OPTIONS += -g -Wall -O2
|
3
|
+
override LINK_OPTIONS +=
|
4
|
+
override STATIC_LIBS +=
|
5
|
+
RM = rm -f
|
6
|
+
MKDIR = mkdir -p
|
7
|
+
MAIN_TARGET = loop_c
|
8
|
+
SRCS = loop.c
|
9
|
+
OBJ_DIR = obj
|
10
|
+
OBJS = obj/./loop.o
|
11
|
+
DEPS = obj/./loop.d
|
12
|
+
|
13
|
+
.PHONY: all obj clean
|
14
|
+
|
15
|
+
all: $(MAIN_TARGET)
|
16
|
+
|
17
|
+
obj: $(OBJS)
|
18
|
+
|
19
|
+
clean:
|
20
|
+
$(RM) $(MAIN_TARGET)
|
21
|
+
$(RM) $(OBJS)
|
22
|
+
$(RM) $(DEPS)
|
23
|
+
|
24
|
+
$(OBJ_DIR)/%.o: %.c
|
25
|
+
@[ -e $(dir $@) ] || $(MKDIR) $(dir $@)
|
26
|
+
|
27
|
+
$(COMPILER) $(COMPILE_OPTIONS) -c $< -o $@
|
28
|
+
|
29
|
+
@$(COMPILER) $(COMPILE_OPTIONS) -MM -MG -MP $< \
|
30
|
+
| sed "s/.*\.o/$(subst /,\/,$@) $(subst /,\/,$(patsubst %.o,%.d,$@))/g" > $(patsubst %.o,%.d,$@); \
|
31
|
+
[ -s $(patsubst %.o,%.d,$@) ] || $(RM) $(patsubst %.o,%.d,$@)
|
32
|
+
|
33
|
+
-include $(DEPS)
|
34
|
+
|
35
|
+
$(MAIN_TARGET): $(OBJS) $(STATIC_LIBS)
|
36
|
+
@[ -e $(dir $@) ] || $(MKDIR) $(dir $@)
|
37
|
+
|
38
|
+
$(COMPILER) $(LINK_OPTIONS) -o $@ $^
|
39
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
task :default => [ :build ]
|
2
|
+
|
3
|
+
desc "Init"
|
4
|
+
task :init do |t, args|
|
5
|
+
sh "npm install date-utils"
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Build"
|
9
|
+
task :build do |t, args|
|
10
|
+
sh "make"
|
11
|
+
sh "go build -o loop_go loop.go"
|
12
|
+
sh "scalac -d obj -optimise loop.scala"
|
13
|
+
sh "mcs -out:loop_cs loop.cs"
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Clean"
|
17
|
+
task :clean do |t, args|
|
18
|
+
sh "make clean"
|
19
|
+
sh "rm -f loop_go obj/*.class loop_cs"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Version"
|
23
|
+
task :version do |t, args|
|
24
|
+
sh "gcc -dumpversion"
|
25
|
+
sh "go version"
|
26
|
+
sh "scala -version"
|
27
|
+
sh "node -v"
|
28
|
+
sh "mono -V|grep version"
|
29
|
+
sh "php -v|grep built"
|
30
|
+
sh "ruby -v"
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "Run"
|
34
|
+
task :run do |t, args|
|
35
|
+
sh "./loop_go"
|
36
|
+
sh "./loop_c"
|
37
|
+
sh "scala loop.scala"
|
38
|
+
sh "node loop.js"
|
39
|
+
sh "mono loop_cs"
|
40
|
+
sh "php loop.php"
|
41
|
+
sh "ruby loop.rb"
|
42
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <stdint.h>
|
3
|
+
#include <stdlib.h>
|
4
|
+
#include <stdbool.h>
|
5
|
+
#include <inttypes.h>
|
6
|
+
#include <sys/time.h>
|
7
|
+
|
8
|
+
uint64_t time_usec( struct timeval* time ){
|
9
|
+
return time->tv_sec * 1000000 + time->tv_usec;
|
10
|
+
}
|
11
|
+
|
12
|
+
int main( int argc, char* argv[] ){
|
13
|
+
int sec = 1;
|
14
|
+
if ( 1 < argc ){
|
15
|
+
sec = atoi( argv[ 1 ] );
|
16
|
+
if ( sec <= 0 ){
|
17
|
+
sec = 1;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
uint64_t usec = sec * 1000000;
|
22
|
+
uint64_t count = 0;
|
23
|
+
struct timeval start_tv;
|
24
|
+
gettimeofday( &start_tv, NULL );
|
25
|
+
uint64_t start_usec = time_usec( &start_tv );
|
26
|
+
while ( true ){
|
27
|
+
count += 1;
|
28
|
+
struct timeval end_tv;
|
29
|
+
gettimeofday( &end_tv, NULL );
|
30
|
+
uint64_t end_usec = time_usec( &end_tv );
|
31
|
+
uint64_t update_usec = end_usec - start_usec;
|
32
|
+
if ( usec <= update_usec ){
|
33
|
+
printf( "count=%"PRIu64" update_usec=%"PRIu64"\n", count, update_usec );
|
34
|
+
break;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
return 0;
|
38
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
using System;
|
2
|
+
|
3
|
+
class Loop {
|
4
|
+
static DateTime m_unix_epoch_base_time = new DateTime( 1970, 1, 1 );
|
5
|
+
|
6
|
+
public static UInt64 TimeUSec( DateTime utc_time ){
|
7
|
+
return (UInt64)( ( utc_time - m_unix_epoch_base_time ).TotalSeconds * 1000000 );
|
8
|
+
}
|
9
|
+
|
10
|
+
public static void Main( string[] args ){
|
11
|
+
Int32 sec = 1;
|
12
|
+
if ( 0 < args.Length ){
|
13
|
+
sec = Convert.ToInt32( args[ 0 ] );
|
14
|
+
}
|
15
|
+
if ( sec <= 0 ){
|
16
|
+
sec = 1;
|
17
|
+
}
|
18
|
+
|
19
|
+
UInt64 usec = (UInt64)sec * 1000000;
|
20
|
+
UInt64 count = 0;
|
21
|
+
UInt64 start_usec = TimeUSec( DateTime.UtcNow );
|
22
|
+
// Console.WriteLine( String.Format( "start_usec={0}", start_usec ) );
|
23
|
+
while ( true ){
|
24
|
+
count += 1;
|
25
|
+
UInt64 end_usec = TimeUSec( DateTime.UtcNow );
|
26
|
+
UInt64 update_usec = end_usec - start_usec;
|
27
|
+
if ( usec <= update_usec ){
|
28
|
+
Console.WriteLine( String.Format( "count={0} update_usec={1}", count, update_usec ) );
|
29
|
+
break;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
package main
|
2
|
+
|
3
|
+
import (
|
4
|
+
"fmt"
|
5
|
+
"time"
|
6
|
+
"os"
|
7
|
+
"strconv"
|
8
|
+
)
|
9
|
+
|
10
|
+
func time_usec( time time.Time )( uint64 ){
|
11
|
+
return uint64( time.UnixNano() / 1000 )
|
12
|
+
}
|
13
|
+
|
14
|
+
func main(){
|
15
|
+
argc := len( os.Args )
|
16
|
+
sec := 1
|
17
|
+
if 2 <= argc {
|
18
|
+
sec, _ = strconv.Atoi( os.Args[ 1 ] )
|
19
|
+
}
|
20
|
+
usec := uint64( sec * 1000000 )
|
21
|
+
|
22
|
+
count := uint64( 0 )
|
23
|
+
start_usec := time_usec( time.Now() )
|
24
|
+
for {
|
25
|
+
count += 1
|
26
|
+
end_usec := time_usec( time.Now() )
|
27
|
+
update_usec := end_usec - start_usec
|
28
|
+
if usec <= update_usec {
|
29
|
+
fmt.Printf( "count=%d update_usec=%d\n", count, update_usec )
|
30
|
+
break
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|