import
sys,os,time,redis,traceback,json,threading,socket
from
cloud.hsnovnc
import
utils
from
cloud
import
log
LOG
=
log.get_logger(__name__)
class
MySocket(
object
):
def
__init__(
self
, proto
=
0
):
if
proto
=
=
0
:
self
.sock
=
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self
.sock.setblocking(
True
)
else
:
self
.sock
=
socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self
.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
1
)
def
my_bind(
self
, host, port):
try
:
self
.sock.bind((host, port))
except
socket.error, e:
LOG.error(e)
return
-
1
return
0
def
my_listen(
self
, num
=
1024
):
try
:
self
.sock.listen(num)
except
socket.error, e:
LOG.error(e)
return
-
1
return
0
def
my_connect(
self
, host, port, time_out
=
-
1
):
try
:
if
time_out
=
=
-
1
:
self
.sock.setblocking(
1
)
else
:
self
.sock.settimeout(time_out)
self
.sock.connect((host, port))
except
socket.error, e:
LOG.error(e)
return
-
1
return
0
def
my_accept(
self
, time_out
=
-
1
):
addr
=
[]
try
:
if
time_out
=
=
-
1
:
self
.sock.setblocking(
1
)
else
:
self
.sock.settimeout(time_out)
client_sock, addr
=
self
.sock.accept()
except
socket.error, e:
LOG.error(e)
return
client_sock, addr
def
my_recv(
self
, buf_size, time_out
=
-
1
):
buf
=
''
try
:
if
time_out
=
=
-
1
:
self
.sock.setblocking(
1
)
else
:
self
.sock.settimeout(time_out)
buf
=
self
.sock.recv(buf_size)
except
Exception, e:
LOG.error(e)
return
buf
def
my_send(
self
, buf, time_out
=
-
1
):
try
:
if
time_out
=
=
-
1
:
self
.sock.setblocking(
1
)
else
:
self
.sock.settimeout(time_out)
send_len
=
self
.sock.send(buf)
return
send_len
except
Exception, e:
LOG.error(e)
return
-
1
def
my_close(
self
, time_out
=
-
1
):
try
:
if
time_out
=
=
-
1
:
self
.sock.setblocking(
1
)
else
:
self
.sock.settimeout(time_out)
self
.sock.close()
except
socket.error, e:
LOG.error(e)
return
-
1
return
0
class
sock_thread(threading.Thread):
def
__init__(
self
, host, port,buf):
threading.Thread.__init__(
self
)
self
.host
=
host
self
.port
=
port
self
.buf
=
buf
def
run(
self
):
sock
=
MySocket()
sock.my_bind(
self
.host,
self
.port)
sock.my_listen(
20
)
LOG.info(
'The socket has been connected'
)
while
True
:
conn, addr
=
sock.my_accept()
while
True
:
data
=
conn.recv(
self
.buf)
if
not
data:
break
else
:
try
:
data
=
json.loads(data)
if
data[
'Node'
][
'UUID'
]:
port
=
utils.get_vnc_port(data[
'Node'
].get(
'UUID'
,
None
))
data[
'Node'
][
'port'
]
=
port
LOG.info(json.dumps(data))
conn.send(json.dumps(data))
else
:
conn.send()
except
:
break
conn.close()
sock.my_close()
class
socket_demo(
object
):
def
__init__(
self
):
host
=
utils.get_net_ip()
self
.host
=
host
self
.port
=
10086
self
.buf
=
4096
def
work(
self
):
self
.sock
=
sock_thread(
self
.host,
self
.port,
self
.buf)
self
.sock.start()
time.sleep(
0.5
)
def
init():
st
=
socket_demo()
st.work()