conreality 0.0.4
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/AUTHORS +1 -0
- data/CREDITS.rst +3 -0
- data/README +6 -0
- data/UNLICENSE +24 -0
- data/VERSION +1 -0
- data/lib/conreality.rb +18 -0
- data/lib/conreality/action.rb +62 -0
- data/lib/conreality/asset.rb +48 -0
- data/lib/conreality/binary.rb +50 -0
- data/lib/conreality/camera.rb +41 -0
- data/lib/conreality/client.rb +105 -0
- data/lib/conreality/event.rb +57 -0
- data/lib/conreality/game.rb +81 -0
- data/lib/conreality/message.rb +57 -0
- data/lib/conreality/object.rb +163 -0
- data/lib/conreality/player.rb +74 -0
- data/lib/conreality/rpc.rb +6 -0
- data/lib/conreality/rpc/common_pb.rb +36 -0
- data/lib/conreality/rpc/master_pb.rb +39 -0
- data/lib/conreality/rpc/master_services_pb.rb +47 -0
- data/lib/conreality/rpc/model_pb.rb +12 -0
- data/lib/conreality/session.rb +129 -0
- data/lib/conreality/theater.rb +74 -0
- data/lib/conreality/version.rb +21 -0
- metadata +164 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: df892d6caf11ad3f9fcb527807a7cf78c718eed71e71e18c6a7c12798577604d
|
4
|
+
data.tar.gz: 8ebee26f5b26f9345081ab9fb1fc96b410feaac46ab3ea134974ed2d88707a16
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef4941aff380f0e717a2f7ae685ec51938a2bc0f064950b6c38d4955fe6486e7dafdb31e1a7c529942caa030d29cc537a869a77c1727345924dbd2cdf6057948
|
7
|
+
data.tar.gz: 29cbab1eafee83fa1b1ab7f4bba8363c703b5c1be7433fa94f8fa162a86d276115e6707c2077691556bd8567b641cc46fb4108c29919d83d91c4091d146f6118
|
data/AUTHORS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* Arto Bendiken <arto@conreality.org>
|
data/CREDITS.rst
ADDED
data/README
ADDED
data/UNLICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
4
|
+
distribute this software, either in source code form or as a compiled
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
6
|
+
means.
|
7
|
+
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
9
|
+
of this software dedicate any and all copyright interest in the
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
11
|
+
of the public at large and to the detriment of our heirs and
|
12
|
+
successors. We intend this dedication to be an overt act of
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
14
|
+
software under copyright law.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
For more information, please refer to <https://unlicense.org/>
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.4
|
data/lib/conreality.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
require_relative 'conreality/version'
|
4
|
+
|
5
|
+
#require_relative 'conreality/object'
|
6
|
+
#require_relative 'conreality/asset'
|
7
|
+
#require_relative 'conreality/camera'
|
8
|
+
#require_relative 'conreality/player'
|
9
|
+
|
10
|
+
#require_relative 'conreality/binary'
|
11
|
+
require_relative 'conreality/event'
|
12
|
+
require_relative 'conreality/message'
|
13
|
+
#require_relative 'conreality/theater'
|
14
|
+
|
15
|
+
#require_relative 'conreality/action'
|
16
|
+
require_relative 'conreality/client'
|
17
|
+
require_relative 'conreality/game'
|
18
|
+
require_relative 'conreality/session'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# A transaction-scoped action.
|
6
|
+
class Action
|
7
|
+
##
|
8
|
+
# The client session this actions belongs to.
|
9
|
+
#
|
10
|
+
# @return [Session]
|
11
|
+
attr_reader :session
|
12
|
+
|
13
|
+
##
|
14
|
+
# @param session [Session]
|
15
|
+
def initialize(session)
|
16
|
+
@session = session
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# Returns a developer-friendly representation of this action.
|
21
|
+
#
|
22
|
+
# @return [String]
|
23
|
+
def inspect
|
24
|
+
sprintf("#<%s:%#0x>", self.class.name, self.__id__)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @!group Events
|
28
|
+
|
29
|
+
##
|
30
|
+
# @param predicate [String] a predicate string
|
31
|
+
# @param subject [Object, UUID] the source object
|
32
|
+
# @param object [Object, UUID, nil] the target object, if any
|
33
|
+
# @return [Event] the sent event
|
34
|
+
def send_event(predicate, subject, object = nil)
|
35
|
+
predicate = predicate.to_s
|
36
|
+
subject = (subject.respond_to?(:uuid) ? subject.uuid : subject).to_s
|
37
|
+
object = object ? (object.respond_to?(:uuid) ? object.uuid : object).to_s : nil
|
38
|
+
|
39
|
+
result = @session.client.call_proc_with_result(:event_send, args: [predicate, subject, object])
|
40
|
+
result ? Conreality::Event.new(@session, result.to_i) : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
# @!endgroup
|
44
|
+
|
45
|
+
# @!group Messaging
|
46
|
+
|
47
|
+
##
|
48
|
+
# @param sender [Object, UUID] the sending asset or player
|
49
|
+
# @param text [String] the message contents as text
|
50
|
+
# @return [Message] the sent message
|
51
|
+
# @todo Support for audio messages.
|
52
|
+
def send_message(sender, text)
|
53
|
+
sender = (sender.respond_to?(:uuid) ? sender.uuid : sender).to_s
|
54
|
+
text = text.to_s
|
55
|
+
|
56
|
+
result = @session.client.call_proc_with_result(:message_send, args: [sender, text])
|
57
|
+
result ? Conreality::Message.new(@session, result.to_i) : nil
|
58
|
+
end
|
59
|
+
|
60
|
+
# @!endgroup
|
61
|
+
end # Action
|
62
|
+
end # Conreality
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality asset.
|
6
|
+
class Asset < Object
|
7
|
+
TABLE = :object_asset
|
8
|
+
KEY = :uuid
|
9
|
+
|
10
|
+
##
|
11
|
+
# The asset's nickname.
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :nick
|
15
|
+
|
16
|
+
##
|
17
|
+
# The asset's full name.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :name
|
21
|
+
|
22
|
+
##
|
23
|
+
# The asset's IPv4/IPv6 address.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
attr_accessor :ip_addr
|
27
|
+
|
28
|
+
##
|
29
|
+
# The asset's avatar image.
|
30
|
+
#
|
31
|
+
# @return [Binary]
|
32
|
+
attr_accessor :avatar
|
33
|
+
attr_wrapper :avatar, :Binary
|
34
|
+
|
35
|
+
##
|
36
|
+
# The asset's deployed software version.
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
attr_accessor :version
|
40
|
+
|
41
|
+
##
|
42
|
+
# @param session [Session]
|
43
|
+
# @param uuid [#to_s]
|
44
|
+
def initialize(session, uuid)
|
45
|
+
super(session, uuid)
|
46
|
+
end
|
47
|
+
end # Asset
|
48
|
+
end # Conreality
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality binary.
|
6
|
+
class Binary #< Database::Row
|
7
|
+
TABLE = :binary
|
8
|
+
KEY = :id
|
9
|
+
|
10
|
+
##
|
11
|
+
# The binary's sequential identifier.
|
12
|
+
#
|
13
|
+
# @return [Integer]
|
14
|
+
attr_reader :id
|
15
|
+
|
16
|
+
##
|
17
|
+
# The binary's unique identifier (SHA-256 fingerprint).
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_reader :sha256
|
21
|
+
|
22
|
+
##
|
23
|
+
# The binary's MIME content type.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
attr_accessor :type
|
27
|
+
|
28
|
+
##
|
29
|
+
# The binary data.
|
30
|
+
#
|
31
|
+
# @return [String]
|
32
|
+
attr_reader :data
|
33
|
+
|
34
|
+
##
|
35
|
+
# @param session [Session]
|
36
|
+
# @param id [#to_i]
|
37
|
+
def initialize(session, id)
|
38
|
+
super(session)
|
39
|
+
@id = id.to_i
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Returns a developer-friendly representation of this binary.
|
44
|
+
#
|
45
|
+
# @return [String]
|
46
|
+
def inspect
|
47
|
+
sprintf("#<%s:%#0x(id: %s)>", self.class.name, self.__id__, @id)
|
48
|
+
end
|
49
|
+
end # Binary
|
50
|
+
end # Conreality
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality camera.
|
6
|
+
class Camera < Object
|
7
|
+
TABLE = :object_camera
|
8
|
+
KEY = :uuid
|
9
|
+
|
10
|
+
##
|
11
|
+
# The camera's resolution (in 2D pixels).
|
12
|
+
#
|
13
|
+
# @return [Array(Integer, Integer)]
|
14
|
+
attr_accessor :resolution
|
15
|
+
|
16
|
+
##
|
17
|
+
# The camera's image format.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :format
|
21
|
+
|
22
|
+
##
|
23
|
+
# The camera's frame rate (per second).
|
24
|
+
#
|
25
|
+
# @return [Integer]
|
26
|
+
attr_accessor :fps
|
27
|
+
|
28
|
+
##
|
29
|
+
# The camera's f-number (the f/N focal ratio).
|
30
|
+
#
|
31
|
+
# @return [Integer]
|
32
|
+
attr_accessor :fnumber
|
33
|
+
|
34
|
+
##
|
35
|
+
# @param session [Session]
|
36
|
+
# @param uuid [#to_s]
|
37
|
+
def initialize(session, uuid)
|
38
|
+
super(session, uuid)
|
39
|
+
end
|
40
|
+
end # Camera
|
41
|
+
end # Conreality
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
require 'uuid'
|
4
|
+
|
5
|
+
require_relative 'rpc'
|
6
|
+
require_relative 'session'
|
7
|
+
require_relative 'version'
|
8
|
+
|
9
|
+
module Conreality
|
10
|
+
##
|
11
|
+
# Client for accessing a Conreality master server.
|
12
|
+
class Client
|
13
|
+
attr_reader :rpc_public
|
14
|
+
attr_reader :rpc_session
|
15
|
+
|
16
|
+
##
|
17
|
+
# @param master_host [String]
|
18
|
+
def self.connect(master_host, *args)
|
19
|
+
self.new(master_host, *args).connect
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param master_host [String]
|
24
|
+
def initialize(master_host)
|
25
|
+
channel_creds = :this_channel_is_insecure
|
26
|
+
@channel = RPC::Session::Stub.setup_channel(nil, master_host, channel_creds)
|
27
|
+
@rpc_public = RPC::Public::Stub.new(master_host, channel_creds, channel_override: @channel)
|
28
|
+
@rpc_session = RPC::Session::Stub.new(master_host, channel_creds, channel_override: @channel)
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Returns a developer-friendly representation of this client.
|
33
|
+
#
|
34
|
+
# @return [String]
|
35
|
+
def inspect
|
36
|
+
sprintf("#<%s:%#0x>", self.class.name, self.__id__)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @!group Connection management
|
40
|
+
|
41
|
+
##
|
42
|
+
# Connects to the server.
|
43
|
+
#
|
44
|
+
# @return [Client] `self`
|
45
|
+
def connect
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Disconnects from the server.
|
51
|
+
#
|
52
|
+
# @return [void]
|
53
|
+
def disconnect!
|
54
|
+
@channel = @rpc_public = @rpc_session = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
# @!endgroup
|
58
|
+
|
59
|
+
# @!group Public interface
|
60
|
+
|
61
|
+
##
|
62
|
+
# Invokes the public `Authenticate` method on the server.
|
63
|
+
#
|
64
|
+
# @param agent_uuid [String]
|
65
|
+
# @param secret [String]
|
66
|
+
# @return [Session]
|
67
|
+
def authenticate(agent_uuid, secret = nil)
|
68
|
+
Session.new(self, 1) # TODO
|
69
|
+
end
|
70
|
+
|
71
|
+
##
|
72
|
+
# Invokes the public `Bye` method on the server.
|
73
|
+
#
|
74
|
+
# @return [void]
|
75
|
+
def bye
|
76
|
+
@rpc_public.bye(RPC::EmptyRequest.new)
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Invokes the public `Hello` method on the server.
|
81
|
+
#
|
82
|
+
# @return [Hash]
|
83
|
+
def hello
|
84
|
+
{version: @rpc_public.hello(RPC::HelloRequest.new(version: Conreality::VERSION.to_s)).version}.freeze
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Invokes the public `Ping` method on the server.
|
89
|
+
#
|
90
|
+
# @return [void]
|
91
|
+
def ping
|
92
|
+
@rpc_public.ping(RPC::PingRequest.new)
|
93
|
+
end
|
94
|
+
|
95
|
+
# @!endgroup
|
96
|
+
|
97
|
+
# @!group Session interface
|
98
|
+
|
99
|
+
# @!endgroup
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
# TODO
|
104
|
+
end # Client
|
105
|
+
end # Conreality
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality event.
|
6
|
+
class Event
|
7
|
+
TABLE = :event
|
8
|
+
KEY = :id
|
9
|
+
|
10
|
+
##
|
11
|
+
# The event's sequential identifier.
|
12
|
+
#
|
13
|
+
# @return [Integer]
|
14
|
+
attr_reader :id
|
15
|
+
|
16
|
+
##
|
17
|
+
# The event's timestamp (in Zulu time).
|
18
|
+
#
|
19
|
+
# @return [Time]
|
20
|
+
attr_reader :timestamp
|
21
|
+
|
22
|
+
##
|
23
|
+
# The event's predicate (an action or verb).
|
24
|
+
#
|
25
|
+
# @return [Symbol]
|
26
|
+
attr_reader :predicate
|
27
|
+
|
28
|
+
##
|
29
|
+
# The subject (i.e., source) of the predicate.
|
30
|
+
#
|
31
|
+
# @return [Object]
|
32
|
+
attr_reader :subject
|
33
|
+
#attr_wrapper :subject, :Object
|
34
|
+
|
35
|
+
##
|
36
|
+
# The object (i.e., target) of the predicate.
|
37
|
+
#
|
38
|
+
# @return [Object]
|
39
|
+
attr_reader :object
|
40
|
+
#attr_wrapper :object, :Object
|
41
|
+
|
42
|
+
##
|
43
|
+
# @param session [Session]
|
44
|
+
# @param id [#to_i]
|
45
|
+
def initialize(session, id)
|
46
|
+
@session, @id = session, id.to_i
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Returns a developer-friendly representation of this event.
|
51
|
+
#
|
52
|
+
# @return [String]
|
53
|
+
def inspect
|
54
|
+
sprintf("#<%s:%#0x(id: %s)>", self.class.name, self.__id__, @id)
|
55
|
+
end
|
56
|
+
end # Event
|
57
|
+
end # Conreality
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# The game database.
|
6
|
+
class Game
|
7
|
+
##
|
8
|
+
# @param session [Session]
|
9
|
+
def initialize(session)
|
10
|
+
@session = session
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Returns a developer-friendly representation of this action.
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
def inspect
|
18
|
+
sprintf("#<%s:%#0x>", self.class.name, self.__id__)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @!group Theaters
|
22
|
+
|
23
|
+
##
|
24
|
+
# Returns the theater identified by the given UUID.
|
25
|
+
#
|
26
|
+
# @param uuid [String] the theater's UUID
|
27
|
+
# @return [Theater] the theater
|
28
|
+
def find_theater(uuid)
|
29
|
+
Conreality::Theater.new(@session, uuid)
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# @todo
|
34
|
+
def each_theater(&block)
|
35
|
+
# TODO
|
36
|
+
end
|
37
|
+
|
38
|
+
# @!endgroup
|
39
|
+
|
40
|
+
# @!group Objects
|
41
|
+
|
42
|
+
##
|
43
|
+
# Returns the object identified by the given UUID.
|
44
|
+
#
|
45
|
+
# @param uuid [String] the object's UUID
|
46
|
+
# @return [Object] the object
|
47
|
+
def find_object(uuid)
|
48
|
+
Conreality::Object.new(@session, uuid)
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# @todo
|
53
|
+
def each_object(&block)
|
54
|
+
# TODO
|
55
|
+
end
|
56
|
+
|
57
|
+
# @!endgroup
|
58
|
+
|
59
|
+
# @!group Events
|
60
|
+
|
61
|
+
##
|
62
|
+
# @todo
|
63
|
+
# @return [Event] the event
|
64
|
+
def find_event(id)
|
65
|
+
# TODO
|
66
|
+
end
|
67
|
+
|
68
|
+
# @!endgroup
|
69
|
+
|
70
|
+
# @!group Messaging
|
71
|
+
|
72
|
+
##
|
73
|
+
# @todo
|
74
|
+
# @return [Message] the message
|
75
|
+
def find_message(id)
|
76
|
+
# TODO
|
77
|
+
end
|
78
|
+
|
79
|
+
# @!endgroup
|
80
|
+
end # Game
|
81
|
+
end # Conreality
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality message.
|
6
|
+
class Message
|
7
|
+
TABLE = :message
|
8
|
+
KEY = :id
|
9
|
+
|
10
|
+
##
|
11
|
+
# The message's sequential identifier.
|
12
|
+
#
|
13
|
+
# @return [Integer]
|
14
|
+
attr_reader :id
|
15
|
+
|
16
|
+
##
|
17
|
+
# The message's timestamp (in Zulu time).
|
18
|
+
#
|
19
|
+
# @return [Time]
|
20
|
+
attr_reader :timestamp
|
21
|
+
|
22
|
+
##
|
23
|
+
# The sender of the message.
|
24
|
+
#
|
25
|
+
# @return [Player, Asset]
|
26
|
+
attr_reader :sender
|
27
|
+
#attr_wrapper :sender, :Object
|
28
|
+
|
29
|
+
##
|
30
|
+
# The message's contents as text.
|
31
|
+
#
|
32
|
+
# @return [String]
|
33
|
+
attr_reader :text
|
34
|
+
|
35
|
+
##
|
36
|
+
# The message's contents as audio.
|
37
|
+
#
|
38
|
+
# @return [Binary]
|
39
|
+
attr_reader :audio
|
40
|
+
#attr_wrapper :audio, :Binary
|
41
|
+
|
42
|
+
##
|
43
|
+
# @param session [Session]
|
44
|
+
# @param id [#to_i]
|
45
|
+
def initialize(session, id)
|
46
|
+
@session, @id = session, id.to_i
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Returns a developer-friendly representation of this message.
|
51
|
+
#
|
52
|
+
# @return [String]
|
53
|
+
def inspect
|
54
|
+
sprintf("#<%s:%#0x(id: %s)>", self.class.name, self.__id__, @id)
|
55
|
+
end
|
56
|
+
end # Message
|
57
|
+
end # Conreality
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality object.
|
6
|
+
class Object #< Database::Row
|
7
|
+
TABLE = :object
|
8
|
+
KEY = :uuid
|
9
|
+
|
10
|
+
##
|
11
|
+
# The object's unique identifier.
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_reader :uuid
|
15
|
+
|
16
|
+
##
|
17
|
+
# The object's type.
|
18
|
+
#
|
19
|
+
# @return [Symbol]
|
20
|
+
attr_reader :type
|
21
|
+
|
22
|
+
##
|
23
|
+
# The theater that the object is located in.
|
24
|
+
#
|
25
|
+
# @return [Theater]
|
26
|
+
attr_accessor :theater
|
27
|
+
|
28
|
+
##
|
29
|
+
# The group, if any, that the object belongs to.
|
30
|
+
#
|
31
|
+
# @return [Group]
|
32
|
+
attr_accessor :group
|
33
|
+
|
34
|
+
##
|
35
|
+
# The object's designated label.
|
36
|
+
#
|
37
|
+
# @return [String]
|
38
|
+
attr_accessor :label
|
39
|
+
|
40
|
+
##
|
41
|
+
# The object's current position (as 3D coordinates relative to its theater).
|
42
|
+
#
|
43
|
+
# @return [?]
|
44
|
+
attr_accessor :position
|
45
|
+
|
46
|
+
##
|
47
|
+
# The object's current orientation (in radians relative to north).
|
48
|
+
#
|
49
|
+
# @return [Float]
|
50
|
+
attr_accessor :orientation
|
51
|
+
|
52
|
+
##
|
53
|
+
# The object's estimated mass (in kilograms).
|
54
|
+
#
|
55
|
+
# @return [Float]
|
56
|
+
attr_accessor :mass
|
57
|
+
|
58
|
+
##
|
59
|
+
# The object's determined radius (in meters).
|
60
|
+
#
|
61
|
+
# @return [Float]
|
62
|
+
attr_accessor :radius
|
63
|
+
|
64
|
+
##
|
65
|
+
# The object's estimated color (as a 24-bit RGB value).
|
66
|
+
#
|
67
|
+
# @return [Integer]
|
68
|
+
attr_accessor :color
|
69
|
+
|
70
|
+
##
|
71
|
+
# @param session [Session]
|
72
|
+
# @param uuid [#to_s]
|
73
|
+
def initialize(session, uuid)
|
74
|
+
super(session)
|
75
|
+
@uuid = uuid.to_s.freeze
|
76
|
+
end
|
77
|
+
|
78
|
+
##
|
79
|
+
# Returns a developer-friendly representation of this object.
|
80
|
+
#
|
81
|
+
# @return [String]
|
82
|
+
def inspect
|
83
|
+
sprintf("#<%s:%#0x(uuid: %s)>", self.class.name, self.__id__, @uuid)
|
84
|
+
end
|
85
|
+
|
86
|
+
# @!group Casts
|
87
|
+
|
88
|
+
##
|
89
|
+
# Returns this object cast to an asset.
|
90
|
+
#
|
91
|
+
# @return [Asset]
|
92
|
+
def as_asset
|
93
|
+
Asset.new(@session, @uuid)
|
94
|
+
end
|
95
|
+
|
96
|
+
##
|
97
|
+
# Returns this object cast to a camera.
|
98
|
+
#
|
99
|
+
# @return [Camera]
|
100
|
+
def as_camera
|
101
|
+
Camera.new(@session, @uuid)
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Returns this object cast to a player.
|
106
|
+
#
|
107
|
+
# @return [Player]
|
108
|
+
def as_player
|
109
|
+
Player.new(@session, @uuid)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @!endgroup
|
113
|
+
|
114
|
+
# @!group Predicates
|
115
|
+
|
116
|
+
##
|
117
|
+
# Checks whether this object is an asset.
|
118
|
+
#
|
119
|
+
# @return [Boolean]
|
120
|
+
def is_asset?
|
121
|
+
nil # TODO
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# Checks whether this object is a camera.
|
126
|
+
#
|
127
|
+
# @return [Boolean]
|
128
|
+
def is_camera?
|
129
|
+
nil # TODO
|
130
|
+
end
|
131
|
+
|
132
|
+
##
|
133
|
+
# Checks whether this object is a player.
|
134
|
+
#
|
135
|
+
# @return [Boolean]
|
136
|
+
def is_player?
|
137
|
+
nil # TODO
|
138
|
+
end
|
139
|
+
|
140
|
+
##
|
141
|
+
# Checks whether this object is a target.
|
142
|
+
#
|
143
|
+
# @return [Boolean]
|
144
|
+
def is_target?
|
145
|
+
nil # TODO
|
146
|
+
end
|
147
|
+
|
148
|
+
# @!endgroup
|
149
|
+
|
150
|
+
# @!group Messaging
|
151
|
+
|
152
|
+
##
|
153
|
+
# @param text [String] the message contents as text
|
154
|
+
# @return [Message] the sent message
|
155
|
+
def send_message(text)
|
156
|
+
@session.execute do |action| # FIXME
|
157
|
+
action.send_message(self, text)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# @!endgroup
|
162
|
+
end # Object
|
163
|
+
end # Conreality
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality player.
|
6
|
+
class Player < Object
|
7
|
+
TABLE = :object_player
|
8
|
+
KEY = :uuid
|
9
|
+
|
10
|
+
##
|
11
|
+
# The player's nickname.
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor :nick
|
15
|
+
|
16
|
+
##
|
17
|
+
# The player's full name.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :name
|
21
|
+
|
22
|
+
##
|
23
|
+
# The player's IPv4/IPv6 address.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
attr_accessor :ip_addr
|
27
|
+
|
28
|
+
##
|
29
|
+
# The player's avatar image.
|
30
|
+
#
|
31
|
+
# @return [Binary]
|
32
|
+
attr_accessor :avatar
|
33
|
+
attr_wrapper :avatar, :Binary
|
34
|
+
|
35
|
+
##
|
36
|
+
# The player's primary language.
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
attr_accessor :language
|
40
|
+
|
41
|
+
##
|
42
|
+
# @param session [Session]
|
43
|
+
# @param uuid [#to_s]
|
44
|
+
def initialize(session, uuid)
|
45
|
+
super(session, uuid)
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Checks whether this player has a bodycam.
|
50
|
+
#
|
51
|
+
# @return [Boolean]
|
52
|
+
def has_camera?
|
53
|
+
@session.client.exec_with_params("SELECT COUNT(*) FROM #{q(Database::SCHEMA)}.#{q(:camera)} WHERE #{q(:uuid)} = $1 LIMIT 1", self.key) do |result|
|
54
|
+
!!result.num_tuples.nonzero?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Returns the bodycam, if any, of this player.
|
60
|
+
#
|
61
|
+
# @return [Camera, nil]
|
62
|
+
def camera
|
63
|
+
self.has_camera? ? self.as_camera : nil
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Deregisters this player from the game.
|
68
|
+
#
|
69
|
+
# @return [void]
|
70
|
+
def deregister!
|
71
|
+
# TODO
|
72
|
+
end
|
73
|
+
end # Player
|
74
|
+
end # Conreality
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: conreality/rpc/common.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "Conreality.RPC.EmptyRequest" do
|
8
|
+
end
|
9
|
+
add_message "Conreality.RPC.EmptyResponse" do
|
10
|
+
end
|
11
|
+
add_message "Conreality.RPC.IDResponse" do
|
12
|
+
optional :id, :uint64, 1
|
13
|
+
end
|
14
|
+
add_message "Conreality.RPC.PingRequest" do
|
15
|
+
end
|
16
|
+
add_message "Conreality.RPC.PongResponse" do
|
17
|
+
end
|
18
|
+
add_message "Conreality.RPC.HelloRequest" do
|
19
|
+
optional :version, :string, 1
|
20
|
+
end
|
21
|
+
add_message "Conreality.RPC.HelloResponse" do
|
22
|
+
optional :version, :string, 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module Conreality
|
27
|
+
module RPC
|
28
|
+
EmptyRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.EmptyRequest").msgclass
|
29
|
+
EmptyResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.EmptyResponse").msgclass
|
30
|
+
IDResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.IDResponse").msgclass
|
31
|
+
PingRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.PingRequest").msgclass
|
32
|
+
PongResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.PongResponse").msgclass
|
33
|
+
HelloRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.HelloRequest").msgclass
|
34
|
+
HelloResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.HelloResponse").msgclass
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: conreality/rpc/master.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
require 'conreality/rpc/model_pb'
|
7
|
+
require 'conreality/rpc/common_pb'
|
8
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
9
|
+
add_message "Conreality.RPC.AuthRequest" do
|
10
|
+
optional :player_nick, :string, 1
|
11
|
+
end
|
12
|
+
add_message "Conreality.RPC.AuthResponse" do
|
13
|
+
optional :session_id, :uint64, 1
|
14
|
+
end
|
15
|
+
add_message "Conreality.RPC.SendEventRequest" do
|
16
|
+
optional :session_id, :uint64, 1
|
17
|
+
optional :predicate, :string, 2
|
18
|
+
optional :subject_uuid, :string, 3
|
19
|
+
optional :object_uuid, :string, 4
|
20
|
+
end
|
21
|
+
add_message "Conreality.RPC.SendMessageRequest" do
|
22
|
+
optional :session_id, :uint64, 1
|
23
|
+
optional :text, :string, 2
|
24
|
+
end
|
25
|
+
add_message "Conreality.RPC.UpdatePlayerRequest" do
|
26
|
+
optional :session_id, :uint64, 1
|
27
|
+
optional :heartbeat, :uint32, 2
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module Conreality
|
32
|
+
module RPC
|
33
|
+
AuthRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.AuthRequest").msgclass
|
34
|
+
AuthResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.AuthResponse").msgclass
|
35
|
+
SendEventRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.SendEventRequest").msgclass
|
36
|
+
SendMessageRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.SendMessageRequest").msgclass
|
37
|
+
UpdatePlayerRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("Conreality.RPC.UpdatePlayerRequest").msgclass
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: conreality/rpc/master.proto for package 'Conreality.RPC'
|
3
|
+
# Original file comments:
|
4
|
+
# This is free and unencumbered software released into the public domain.
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'grpc'
|
8
|
+
require 'conreality/rpc/master_pb'
|
9
|
+
|
10
|
+
module Conreality
|
11
|
+
module RPC
|
12
|
+
module Public
|
13
|
+
class Service
|
14
|
+
|
15
|
+
include GRPC::GenericService
|
16
|
+
|
17
|
+
self.marshal_class_method = :encode
|
18
|
+
self.unmarshal_class_method = :decode
|
19
|
+
self.service_name = 'Conreality.RPC.Public'
|
20
|
+
|
21
|
+
rpc :Authenticate, AuthRequest, AuthResponse
|
22
|
+
rpc :Bye, EmptyRequest, EmptyResponse
|
23
|
+
rpc :Hello, HelloRequest, HelloResponse
|
24
|
+
rpc :Ping, PingRequest, PongResponse
|
25
|
+
end
|
26
|
+
|
27
|
+
Stub = Service.rpc_stub_class
|
28
|
+
end
|
29
|
+
module Session
|
30
|
+
class Service
|
31
|
+
|
32
|
+
include GRPC::GenericService
|
33
|
+
|
34
|
+
self.marshal_class_method = :encode
|
35
|
+
self.unmarshal_class_method = :decode
|
36
|
+
self.service_name = 'Conreality.RPC.Session'
|
37
|
+
|
38
|
+
rpc :Ping, PingRequest, PongResponse
|
39
|
+
rpc :SendEvent, SendEventRequest, IDResponse
|
40
|
+
rpc :SendMessage, SendMessageRequest, IDResponse
|
41
|
+
rpc :UpdatePlayer, UpdatePlayerRequest, EmptyResponse
|
42
|
+
end
|
43
|
+
|
44
|
+
Stub = Service.rpc_stub_class
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
require_relative 'event'
|
4
|
+
require_relative 'game'
|
5
|
+
require_relative 'message'
|
6
|
+
|
7
|
+
module Conreality
|
8
|
+
##
|
9
|
+
# An authenticated session.
|
10
|
+
class Session
|
11
|
+
##
|
12
|
+
# The client connection this session belongs to.
|
13
|
+
#
|
14
|
+
# @return [Client]
|
15
|
+
attr_reader :client
|
16
|
+
|
17
|
+
##
|
18
|
+
# The session ID.
|
19
|
+
#
|
20
|
+
# @return [Integer]
|
21
|
+
attr_reader :id
|
22
|
+
|
23
|
+
##
|
24
|
+
# @param client [Client]
|
25
|
+
# @param id [Integer]
|
26
|
+
def initialize(client, id)
|
27
|
+
@client, @id = client, id.to_i
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Returns a developer-friendly representation of this session.
|
32
|
+
#
|
33
|
+
# @return [String]
|
34
|
+
def inspect
|
35
|
+
sprintf("#<%s:%#0x>", self.class.name, self.__id__)
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Invokes the session-scoped `Ping` method on the server.
|
40
|
+
#
|
41
|
+
# @return [void]
|
42
|
+
def ping
|
43
|
+
@client.rpc_session.ping(RPC::PingRequest.new)
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Invokes the session-scoped `SendEvent` method on the server.
|
48
|
+
#
|
49
|
+
# @param [String, #to_s] predicate
|
50
|
+
# @param [Object] subject
|
51
|
+
# @param [Object] object
|
52
|
+
# @return [Event]
|
53
|
+
def send_event(predicate, subject, object)
|
54
|
+
response = @client.rpc_session.send_event(
|
55
|
+
RPC::SendEventRequest.new(
|
56
|
+
session_id: @id,
|
57
|
+
predicate: predicate,
|
58
|
+
subject: subject,
|
59
|
+
object: object,
|
60
|
+
)
|
61
|
+
)
|
62
|
+
Event.new(self, response.id)
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# Invokes the session-scoped `SendMessage` method on the server.
|
67
|
+
#
|
68
|
+
# @param [String, #to_s] text
|
69
|
+
# @return [Message]
|
70
|
+
def send_message(text)
|
71
|
+
response = @client.rpc_session.send_message(
|
72
|
+
RPC::SendMessageRequest.new(
|
73
|
+
session_id: @id,
|
74
|
+
text: text.to_s,
|
75
|
+
)
|
76
|
+
)
|
77
|
+
Message.new(self, response.id)
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# Invokes the session-scoped `UpdatePlayer` method on the server.
|
82
|
+
#
|
83
|
+
# @return [void]
|
84
|
+
def update_player()
|
85
|
+
@client.rpc_session.update_player(
|
86
|
+
RPC::UpdatePlayerRequest.new(
|
87
|
+
session_id: @id,
|
88
|
+
)
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
##
|
93
|
+
# Terminates this session.
|
94
|
+
#
|
95
|
+
# @return [void]
|
96
|
+
def logout!
|
97
|
+
# TODO
|
98
|
+
@client = nil
|
99
|
+
end
|
100
|
+
|
101
|
+
##
|
102
|
+
# TODO
|
103
|
+
#
|
104
|
+
# @return [Game]
|
105
|
+
def game
|
106
|
+
Game.new(self)
|
107
|
+
end
|
108
|
+
|
109
|
+
# @!group Action execution
|
110
|
+
|
111
|
+
##
|
112
|
+
# @yield [action]
|
113
|
+
# @yieldparam action [Action]
|
114
|
+
# @yieldreturn [void]
|
115
|
+
# @return [void]
|
116
|
+
def _execute(&block)
|
117
|
+
action = Action.new(self)
|
118
|
+
if @client.connection.transaction_status.zero?
|
119
|
+
# not yet in transaction scope
|
120
|
+
@client.connection.transaction { |_| block.call(action) }
|
121
|
+
else
|
122
|
+
# already in transaction scope
|
123
|
+
block.call(action)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# @!endgroup
|
128
|
+
end # Session
|
129
|
+
end # Conreality
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
##
|
5
|
+
# Represents a Conreality theater of operations.
|
6
|
+
class Theater #< Database::Row
|
7
|
+
TABLE = :theater
|
8
|
+
KEY = :uuid
|
9
|
+
|
10
|
+
##
|
11
|
+
# The theater's unique identifier.
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
attr_reader :uuid
|
15
|
+
|
16
|
+
##
|
17
|
+
# The theater's designated label.
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
attr_accessor :label
|
21
|
+
|
22
|
+
##
|
23
|
+
# The theater's origin location (as GPS coordinates).
|
24
|
+
#
|
25
|
+
# @return [?]
|
26
|
+
attr_accessor :location
|
27
|
+
|
28
|
+
##
|
29
|
+
# @param session [Session]
|
30
|
+
# @param uuid [#to_s]
|
31
|
+
def initialize(session, uuid)
|
32
|
+
super(session)
|
33
|
+
@uuid = uuid.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Returns a developer-friendly representation of this theater.
|
38
|
+
#
|
39
|
+
# @return [String]
|
40
|
+
def inspect
|
41
|
+
sprintf("#<%s:%#0x(uuid: %s)>", self.class.name, self.__id__, @uuid)
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# @todo
|
46
|
+
def each_object(&block)
|
47
|
+
# TODO
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# @todo
|
52
|
+
def each_asset(&block)
|
53
|
+
# TODO
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# @todo
|
58
|
+
def each_camera(&block)
|
59
|
+
# TODO
|
60
|
+
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# @todo
|
64
|
+
def each_player(&block)
|
65
|
+
# TODO
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# @todo
|
70
|
+
def each_target(&block)
|
71
|
+
# TODO
|
72
|
+
end
|
73
|
+
end # Theater
|
74
|
+
end # Conreality
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
module Conreality
|
4
|
+
module VERSION
|
5
|
+
FILE = File.expand_path('../../VERSION', __dir__).freeze
|
6
|
+
STRING = File.read(FILE).chomp.freeze
|
7
|
+
MAJOR, MINOR, TINY, EXTRA = STRING.split('.').map(&:to_i).freeze
|
8
|
+
|
9
|
+
##
|
10
|
+
# @return [String]
|
11
|
+
def self.to_s() STRING end
|
12
|
+
|
13
|
+
##
|
14
|
+
# @return [String]
|
15
|
+
def self.to_str() STRING end
|
16
|
+
|
17
|
+
##
|
18
|
+
# @return [Array(Integer, Integer, Integer)]
|
19
|
+
def self.to_a() [MAJOR, MINOR, TINY].freeze end
|
20
|
+
end # VERSION
|
21
|
+
end # Conreality
|
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: conreality
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Conreality.org
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 12.3.1
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 12.3.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.8'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: drylib
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: grpc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.15'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.15'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: uuid
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.3'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 2.3.9
|
93
|
+
type: :runtime
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '2.3'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 2.3.9
|
103
|
+
description: Conreality Software Development Kit (SDK) for Ruby.
|
104
|
+
email: conreality@googlegroups.com
|
105
|
+
executables: []
|
106
|
+
extensions: []
|
107
|
+
extra_rdoc_files: []
|
108
|
+
files:
|
109
|
+
- AUTHORS
|
110
|
+
- CREDITS.rst
|
111
|
+
- README
|
112
|
+
- UNLICENSE
|
113
|
+
- VERSION
|
114
|
+
- lib/conreality.rb
|
115
|
+
- lib/conreality/action.rb
|
116
|
+
- lib/conreality/asset.rb
|
117
|
+
- lib/conreality/binary.rb
|
118
|
+
- lib/conreality/camera.rb
|
119
|
+
- lib/conreality/client.rb
|
120
|
+
- lib/conreality/event.rb
|
121
|
+
- lib/conreality/game.rb
|
122
|
+
- lib/conreality/message.rb
|
123
|
+
- lib/conreality/object.rb
|
124
|
+
- lib/conreality/player.rb
|
125
|
+
- lib/conreality/rpc.rb
|
126
|
+
- lib/conreality/rpc/common_pb.rb
|
127
|
+
- lib/conreality/rpc/master_pb.rb
|
128
|
+
- lib/conreality/rpc/master_services_pb.rb
|
129
|
+
- lib/conreality/rpc/model_pb.rb
|
130
|
+
- lib/conreality/session.rb
|
131
|
+
- lib/conreality/theater.rb
|
132
|
+
- lib/conreality/version.rb
|
133
|
+
homepage: https://sdk.conreality.org/ruby/
|
134
|
+
licenses:
|
135
|
+
- Unlicense
|
136
|
+
metadata:
|
137
|
+
bug_tracker_uri: https://github.com/conreality/conreality.rb/issues
|
138
|
+
changelog_uri: https://github.com/conreality/conreality.rb/blob/master/CHANGES.rst
|
139
|
+
documentation_uri: https://www.rubydoc.info/github/conreality/conreality.rb/master
|
140
|
+
homepage_uri: https://sdk.conreality.org/ruby/
|
141
|
+
mailing_list_uri: https://groups.google.com/forum/#!forum/conreality
|
142
|
+
source_code_uri: https://github.com/conreality/conreality.rb
|
143
|
+
wiki_uri: https://wiki.conreality.org/Ruby
|
144
|
+
post_install_message:
|
145
|
+
rdoc_options: []
|
146
|
+
require_paths:
|
147
|
+
- lib
|
148
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 2.5.1
|
153
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 2.7.6
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 2.7.6
|
161
|
+
signing_key:
|
162
|
+
specification_version: 4
|
163
|
+
summary: Conreality Software Development Kit (SDK) for Ruby.
|
164
|
+
test_files: []
|