Class: Warchat::Chat::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/warchat/chat/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeClient

Returns a new instance of Client.



10
11
12
13
14
15
16
# File 'lib/warchat/chat/client.rb', line 10

def initialize
  @session = Warchat::Network::Session.new

  [:receive,:establish,:error].each do |m| 
    session.send("on_#{m}=".to_sym, method("session_#{m}".to_sym)) 
  end
end

Instance Attribute Details

#character_nameObject

Returns the value of attribute character_name.



6
7
8
# File 'lib/warchat/chat/client.rb', line 6

def character_name
  @character_name
end

#character_realmObject

Returns the value of attribute character_realm.



6
7
8
# File 'lib/warchat/chat/client.rb', line 6

def character_realm
  @character_realm
end

#on_chat_logoutObject

Returns the value of attribute on_chat_logout.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_chat_logout
  @on_chat_logout
end

#on_establishObject

Returns the value of attribute on_establish.



4
5
6
# File 'lib/warchat/chat/client.rb', line 4

def on_establish
  @on_establish
end

#on_failObject

Returns the value of attribute on_fail.



4
5
6
# File 'lib/warchat/chat/client.rb', line 4

def on_fail
  @on_fail
end

#on_logoutObject

Returns the value of attribute on_logout.



4
5
6
# File 'lib/warchat/chat/client.rb', line 4

def on_logout
  @on_logout
end

#on_messageObject

Returns the value of attribute on_message.



4
5
6
# File 'lib/warchat/chat/client.rb', line 4

def on_message
  @on_message
end

#on_message_afkObject

Returns the value of attribute on_message_afk.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_afk
  @on_message_afk
end

#on_message_dndObject

Returns the value of attribute on_message_dnd.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_dnd
  @on_message_dnd
end

#on_message_guild_chatObject

Returns the value of attribute on_message_guild_chat.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_guild_chat
  @on_message_guild_chat
end

#on_message_motdObject

Returns the value of attribute on_message_motd.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_motd
  @on_message_motd
end

#on_message_officer_chatObject

Returns the value of attribute on_message_officer_chat.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_officer_chat
  @on_message_officer_chat
end

#on_message_whisperObject

Returns the value of attribute on_message_whisper.



5
6
7
# File 'lib/warchat/chat/client.rb', line 5

def on_message_whisper
  @on_message_whisper
end

#on_presenceObject

Returns the value of attribute on_presence.



4
5
6
# File 'lib/warchat/chat/client.rb', line 4

def on_presence
  @on_presence
end

#sessionObject (readonly)

Returns the value of attribute session.



8
9
10
# File 'lib/warchat/chat/client.rb', line 8

def session
  @session
end

Instance Method Details

#chat(response) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/warchat/chat/client.rb', line 57

def chat response
  response.extend(ChatResponse)
  if response.ack?
    
  elsif response.message?
    message = Message.new(response)
    on_message and on_message.call(message)
    m = "on_message_#{message.type}".to_sym
    send(m) and send(m).call(message)
  elsif response.presence?
    on_presence and on_presence.call(Presence.new(response))
  else
    puts "unhandled chat type: #{response.chat_type}"
  end
end

#chat_login(response) ⇒ Object



52
53
54
55
# File 'lib/warchat/chat/client.rb', line 52

def  response
  puts "Logged into chat"
  @chat_session_id = response["chatSessionId"]
end

#chat_logout(response) ⇒ Object



45
46
47
48
49
50
# File 'lib/warchat/chat/client.rb', line 45

def chat_logout response
  puts 'Logged out of chat'
  @timer and @timer.stop
  on_chat_logout and on_chat_logout.call response
  session.close
end

#closeObject



78
79
80
81
# File 'lib/warchat/chat/client.rb', line 78

def close
  close_nonblock
  sleep(0.1) until session.is_closed?
end

#close_nonblockObject



73
74
75
76
# File 'lib/warchat/chat/client.rb', line 73

def close_nonblock
  request = Warchat::Network::Request.new("/chat-logout",:chatSessionId=>@chat_session_id)
  session.send_request(request)
end

#keep_aliveObject



83
84
85
86
# File 'lib/warchat/chat/client.rb', line 83

def keep_alive
  request = Warchat::Network::Request.new("/ah-mail",:n=>character_name,:r=>character_realm)
  session.send_request(request)
end

#loginObject



35
36
37
38
39
# File 'lib/warchat/chat/client.rb', line 35

def 
  request = Warchat::Network::Request.new("/chat-login",:options=>{:mature_filter=>'false'},:n=>character_name,:r=>character_realm)
  session.send_request(request)
  @timer = Warchat::Timer.new(30,&method(:keep_alive))
end

#logoutObject



41
42
43
# File 'lib/warchat/chat/client.rb', line 41

def logout
  request = Warchat::Network::Request.new('/chat-logout',:chatSessionId=>@chat_session_id)
end

#message(msg, chat_type = Message.CHAT_MSG_TYPE_GUILD_CHAT) ⇒ Object



88
89
90
91
# File 'lib/warchat/chat/client.rb', line 88

def message(msg, chat_type = Message.CHAT_MSG_TYPE_GUILD_CHAT)
  request = Warchat::Network::Request.new("/chat-guild",:type=>chat_type,:body=>msg,:chatSessionId=>@chat_session_id)
  session.send_request(request)
end

#session_error(response) ⇒ Object



22
23
24
# File 'lib/warchat/chat/client.rb', line 22

def session_error response
  on_fail and on_fail.call(response["body"]) if response.target == "/chat-login"
end

#session_establish(response) ⇒ Object



26
27
28
# File 'lib/warchat/chat/client.rb', line 26

def session_establish response
  on_establish and on_establish.call(response)
end

#session_receive(response) ⇒ Object



30
31
32
33
# File 'lib/warchat/chat/client.rb', line 30

def session_receive response
  m = response.target.gsub('/','').underscore.to_sym
  send(m,response) if respond_to? m
end

#start(username, password) ⇒ Object



18
19
20
# File 'lib/warchat/chat/client.rb', line 18

def start username, password
  self.session.start(username,password)
end

#whisper(msg, char_id) ⇒ Object



93
94
95
96
# File 'lib/warchat/chat/client.rb', line 93

def whisper(msg, char_id)
  request = Warchat::Network::Request.new("/chat-whisper",:to=>char_id,:body=>msg,:chatSessionId=>@chat_session_id)
  session.send_request(request)
end