libfchat 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,14 +7,14 @@ module Libfchat
7
7
  #I don't actually NEED rubygems, unless on 1.8
8
8
  end
9
9
  require 'multi_json'
10
+ require 'faye/websocket'
10
11
  require 'eventmachine'
11
- require 'em-http-request'
12
12
  require 'libfchat/version'
13
13
  require 'libfchat/webapi'
14
14
 
15
15
  class Fchat
16
16
  attr_reader :ticket
17
- attr_accessor :http
17
+ attr_accessor :websocket
18
18
 
19
19
  attr_reader :version
20
20
  attr_reader :clientname
@@ -28,6 +28,21 @@ module Libfchat
28
28
  @version = version
29
29
  end
30
30
 
31
+ ##
32
+ # Some method_missing magic to make ruby handle just throwing around
33
+ # commands that may or may not exist.
34
+
35
+ def method_missing(method_name, *args, &block)
36
+ puts "Method_missing: #{method_name}"
37
+ # Try to handle all three-letter strings
38
+ puts "Trying to parse |#{method_name.to_s[0,3]}|"
39
+ if method_name.to_s[0,3] == method_name.to_s
40
+ puts "Dunno how to handle #{method_name.to_s}"
41
+ else
42
+ #super(method_name,*args,&block)
43
+ end
44
+ end
45
+
31
46
  ##
32
47
  # Login to fchat as a specific user, and start the event machine
33
48
 
@@ -35,34 +50,32 @@ module Libfchat
35
50
  webapi = Libfchat::WebAPI.new
36
51
  @ticket = webapi.get_ticket(account,password)
37
52
 
38
- EventMachine.run {
39
- self.http = EventMachine::HttpRequest.new(server).get :timeout => timeout
40
- self.http.errback { puts "Could not connect to " + server }
41
- self.http.callback {
53
+ EM.run {
54
+ @websocket = Faye::WebSocket::Client.new(server)
55
+
56
+ @websocket.onopen = lambda do |event|
42
57
  puts "Websocket connected"
43
- self.send_IDN(account,character,ticket)
44
- }
58
+ self.send('IDN',account,character,ticket)
59
+ puts "Authentication sent"
60
+ end
61
+
62
+ @websocket.onclose = lambda do |event|
63
+ @websocket = nil
64
+ end
45
65
 
46
- self.http.stream { |msg|
47
- puts "#{msg[0,3]}: #{msg[4,-1]}"
48
- self.send(msg[0,3].upcase,MultiJson.load(msg[4,-1]))
49
- }
66
+ @websocket.onmessage = lambda do |event|
67
+ puts "<< #{event.data}"
68
+ end
50
69
  }
51
70
  end
52
71
 
53
- ##
54
- # Some method_missing magic to make ruby handle just throwing around
55
- # commands that may or may not exist.
56
-
57
- def method_missing(method_name, *args, &block)
58
- # Try to handle all three-letter strings
59
- if method_name.to_s[0,3] == method_name.to_s
60
- puts "Dunno how to handle #{method_name.to_s}"
61
- else
62
- super(method_name,*args,&block)
63
- end
72
+ def send_message(type,json)
73
+ jsonstr = ::MultiJson.dump(json)
74
+ msg = "#{type} #{jsonstr}"
75
+ puts ">> #{msg}"
76
+ @websocket.send(msg)
64
77
  end
65
-
78
+
66
79
  # ====================================================== #
67
80
  # All commands that can be sent by a client have helpers #
68
81
  # ====================================================== #
@@ -71,33 +84,39 @@ module Libfchat
71
84
  # Performs an account ban against a characters account.
72
85
  # *This command requires chat op or higher.*
73
86
 
74
- def send_ACB(character)
87
+ def ACB(character)
75
88
  json = { :character => character }
76
- self.http.send( "ACB " + MultiJSON.dump(json) )
89
+ self.send('send_message','ACB',json)
77
90
  end
78
91
 
79
92
  ##
80
93
  # Adds a character to the chat operator list.
81
94
  # *This command is admin only.*
82
95
 
83
- def send_AOP(character)
96
+ def AOP(character)
84
97
  json = { :character => character }
85
- self.http.send( "AOP " + MultiJSON.dump(json) )
98
+ self.send('send_message','AOP',json)
86
99
  end
87
100
 
88
101
  ##
89
102
  # This command is used to identify with the server.
90
- # NOTE: If you send any commands before identifying, you will be disconnected.
91
-
92
- def send_IDN(account,character,ticket,cname=@clientname,cversion=@version,method="ticket")
103
+ # NOTE: If you send any commands before identifying, you will be
104
+ # disconnected.
105
+
106
+ def IDN(account,
107
+ character,
108
+ ticket,
109
+ cname=@clientname,
110
+ cversion=@version,
111
+ method="ticket")
93
112
  # Initial identification with the server
94
113
  json = {:account => account,
95
114
  :character => character,
96
- :ticket => ticket,
115
+ :ticket => ticket['ticket'],
97
116
  :cname => cname,
98
117
  :cversion => cversion,
99
- :method => ticket}
100
- self.http.send( "IDN " + MultiJson.dump(json) )
118
+ :method => 'ticket'}
119
+ self.send('send_message','IDN',json)
101
120
  end
102
121
 
103
122
 
@@ -2,5 +2,5 @@ module Libfchat
2
2
  # We're doing this because we might write tests that deal
3
3
  # with other versions of Libfchat and we are unsure how to
4
4
  # handle this better.
5
- VERSION = "0.1.5" unless defined?(::Libfchat::VERSION)
5
+ VERSION = "0.2.0" unless defined?(::Libfchat::VERSION)
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libfchat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -60,13 +60,13 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.3.6
62
62
  - !ruby/object:Gem::Dependency
63
- name: em-http-request
63
+ name: faye-websocket
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 1.0.2
69
+ version: 0.4.6
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 1.0.2
77
+ version: 0.4.6
78
78
  description: A library for connecting to F-chat ( http://f-list.net )
79
79
  email: cheetahmorph@gmail.com
80
80
  executables: []