Advertisement
Guest User

Untitled

a guest
Feb 10th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. #TODO check current network?
  4.  
  5. require "socket"
  6.  
  7. sock = UDPSocket.open
  8. #TODO broadcast ??
  9. sock.setsockopt(
  10. Socket::SOL_SOCKET,
  11. Socket::SO_BROADCAST,
  12. 1
  13. )
  14.  
  15. IP = '10.10.100.254'
  16. PORT = '48899'
  17.  
  18.  
  19. #TODO same socket ??
  20.  
  21. def sock.command msg
  22. self.send msg, 0, IP, PORT
  23. end
  24.  
  25.  
  26. #TODO wait responses
  27.  
  28. t1 = Thread.new do
  29. #%x[ruby upd_server.rb]
  30.  
  31. puts '-- receive response: WSCAN ....'
  32. rsock = UDPSocket.new
  33. RECEIVE_IP = "0.0.0.0"
  34. rsock.bind(RECEIVE_IP, PORT)
  35. #wlans = []
  36. string = nil
  37.  
  38. sel = IO::select([rsock])
  39. if sel != nil
  40. sel[0].each do |s|
  41. data = s.recvfrom_nonblock(65535)
  42. string = data[0].chomp!
  43. #ip, port = data[1][3].to_s, data[1][1].to_i
  44. #puts "Server > %-15s:%5d '%s'" % [ip, port, string]
  45. #wlans = string.split "\n"
  46. end
  47. else
  48. puts '-- not received ....'
  49. exit
  50. end
  51. rsock.close
  52. #wlans
  53. string.gsub(/\+ok=\n/, '')
  54. end
  55.  
  56. sleep 1
  57. puts '-- send command: WSCAN ....'
  58. sock.command "Link_Wi-Fi"
  59. sock.command "+ok"
  60. sock.command "AT+WSCAN\r"
  61. puts '-- sent command ------------'
  62.  
  63. #puts '-- receive response: WSCAN ....'
  64. #sel = IO::select([sock])
  65. #if sel.nil?
  66. # sel[0].each do |s|
  67. # data = s.recvfrom_nonblock(65535)
  68. # string = data[0].chomp!
  69. # ip, port = data[1][3].to_s, data[1][1].to_i
  70. # puts "Server > %-15s:%5d '%s'" % [ip, port, string]
  71. # wlans = string.split "\n"
  72. # end
  73. #else
  74. # puts '-- not received ....'
  75. # exit
  76. #end
  77.  
  78. t1.join
  79.  
  80. require 'csv'
  81. wlans = t1.value.split "\n"
  82.  
  83. wlans.shift
  84. #wlans.each do |line|
  85. ssids = wlans.map do |line|
  86. #ch, ssid, bssid, sec, siganl, ext, nt, wps, dpid = line.split(',')
  87. ch, ssid, _, sec, _ = line.split(',')
  88. if ssid
  89. {ch: ch, ssid: ssid, sec: sec}
  90. end
  91. end.compact
  92. #sock.command "Link_Wi-Fi"
  93. #sock.command "+ok"
  94. #sock.command "AT+WSCAN\r"
  95.  
  96. ssids.each.with_index do |s, idx|
  97. puts "[#{'%3d' % idx}] #{s[:ch]}:'#{s[:ssid]}' (#{s[:sec]})"
  98. end
  99.  
  100. # TODO: choice ssid
  101.  
  102. sock.command "AT+WSSSID=becofy-g-24g\r"
  103. sock.command "AT+WSKEY=WPA2PSK,AES,Asa0211manzoku\r"
  104. sock.command "AT+WMODE=STA\r"
  105. sock.command "AT+Z\r"
  106. sock.command "AT+Q\r"
  107.  
  108.  
  109. #p ssids
  110.  
  111.  
  112. #sock.send "Link_Wi-Fi", 0, '10.10.100.255', 48899
  113. #sock.send "+ok", 0, '10.10.100.254', 48899
  114. #sock.send "AT+WSCAN\r", 0, '10.10.100.254', 48899
  115.  
  116. # サーバからの情報を受け取り表示するスレッドを作成
  117. #thread = Thread.new {
  118. # while true
  119. # # sockに出力が来るのを5秒待つ。
  120. # # 来なかったらnilを返す。
  121. # sel = IO::select([sock], nil, nil, 5)
  122. # if sel != nil
  123. # sel[0].each{|s|
  124. # data = s.recvfrom_nonblock(65535)
  125. # puts data[0].chomp!
  126. # }
  127. # end
  128. # end
  129. #}
  130. #
  131. ## サーバに情報を送信するループ
  132. #while true
  133. # string = STDIN.gets.chomp!
  134. # sock.send(sprintf("%-5s> %s\n", NAME, string), 0, SERVERIP, SERVERPORT)
  135. #end
  136.  
  137. sock.close
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement