10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/ledmon/monster/session.rb', line 10
def session_connect!
@client = Ledmon::World::Stub.new(
session_grpc_host,
:this_channel_is_insecure,
interceptors: [
Ledmon::Interceptors::SleepInterceptor.new,
],
)
session_responses = client.session(Ledmon::SessionRequest.new(token: Ledmon::Config.auth, avatars: [avatar].flatten,))
start_response = session_responses.next
@name = start_response.name
logger.debug("Got response: #{start_response.inspect}")
if start_response.status == :STARTED
logger.debug("Session started. Welcome, #{name}!")
else
raise Ledmon::Error, "Failed to start session: #{start_response.status}"
end
update_movement(start_response.movement)
Thread.new do
loop do
session_responses.map do |response|
case response.status
when :FINISHED
logger.debug("Session finished.")
throw :finished
else
logger.debug("Received unknown response: #{response.inspect}")
end
end
end
rescue => ex
logger.error("An error occurred: #{ex.message}")
logger.error(ex.backtrace.join("\n"))
end
Thread.new do
loop do
client.keep_alive(Ledmon::Empty.new)
sleep 1
end
rescue GRPC::Unavailable => ex
logger.debug("Server is unavailable: #{ex.message}")
error "Server disconnected."
exit 1
end
ok "Connected to the monster server as #{name}"
rescue GRPC::Unavailable => ex
raise Ledmon::Error, "Server is unavailable: #{ex.message}"
end
|