Skip to content

Instantly share code, notes, and snippets.

@mhahl
Forked from ericchen/gist:2656869
Created October 20, 2015 04:16
Show Gist options
  • Save mhahl/37e06e1e9bddcf4df30d to your computer and use it in GitHub Desktop.
Save mhahl/37e06e1e9bddcf4df30d to your computer and use it in GitHub Desktop.
receive data from one client and forward data to tcp server on remote
require 'rubygems'
require 'eventmachine'
require "socket"
module GwServer
# @server_socket = TCPSocket.open('127.0.0.1', 3000)
# @queue = []
class GwTcpClient < EventMachine::Connection
def notify_readable
received_data = @io.read_nonblock(4096)
puts "INFO: notify_readable() => #{received_data.inspect}"
# Just for testing purposes:
sleep 1
end
def post_init
puts "sending request to server"
# send_data "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n"
end
def receive_data data
puts "recvs: #{data}"
send_data_to_tcp_server(data)
end
def send_data_to_tcp_server(data)
puts "send data:#{data}"
send_data data
end
end
class GwDataServer < EM::Connection
attr_accessor :server_socket
def post_init
# puts "Acabei de me conectar"
# EM.start_server "127.0.0.0", 3000, TcpClient, self
end
def receive_data(data)
puts "recieve data:#{data}"
# send_data ">>>you sent: #{data}"
@server_socket.send_data "#{data}\n"
end
def send_data_to_tcpserver data
@server_socket.puts "#{data}\n"
end
def get_message_from_tcp_server
end
end
def self.run
EM.run do
puts "dataServer running..."
@server_socket = EventMachine::connect '127.0.0.1', 3000, GwTcpClient
EM.start_server("127.0.0.1", 8081, GwDataServer) do |s|
s.server_socket = @server_socket
# conn = EventMachine.watch(@server_socket, TcpClient)
# conn.notify_readable = true
end
end
end
end
GwServer.run
#############documents##########################
## this program will start a server to receive data from local client, it would send data to tcp server on
## remote after receive data from local client.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment