bugfix
This commit is contained in:
parent
5f0e01941c
commit
7ff131e383
@ -11,23 +11,37 @@ class Wss:
|
|||||||
session_type: p2p, aba, meeting
|
session_type: p2p, aba, meeting
|
||||||
|
|
||||||
signaling data format
|
signaling data format
|
||||||
|
create a new session
|
||||||
{
|
{
|
||||||
type:callRequest,
|
type:new_session,
|
||||||
sessionid:kkkk,
|
session:{
|
||||||
sessiontype:...
|
sessiontype:
|
||||||
|
sessionid
|
||||||
|
}
|
||||||
from:
|
from:
|
||||||
to:
|
to:
|
||||||
}
|
}
|
||||||
|
(will boastcast to all peer online)login:
|
||||||
|
{
|
||||||
|
type:login,
|
||||||
|
from:
|
||||||
|
}
|
||||||
|
(will boastcast to all peer online)logout:
|
||||||
|
{
|
||||||
|
type:logout
|
||||||
|
from:
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
def __init__(self, app, wss_url, info=None, handler_name='sessionid'):
|
def __init__(self, app, wss_url, info=None, opts={}):
|
||||||
self.wss_url = wss_url
|
self.wss_url = wss_url
|
||||||
if info is None:
|
if info is None:
|
||||||
info = {
|
info = {
|
||||||
'id':getID()
|
'id':getID()
|
||||||
}
|
}
|
||||||
self.ifno = info
|
self.opts = opts
|
||||||
|
self.info = info
|
||||||
self.ws = None
|
self.ws = None
|
||||||
self.handler_name = handler_name
|
self.handler_name = 'sessionid'
|
||||||
self.app = app
|
self.app = app
|
||||||
self.running = False
|
self.running = False
|
||||||
self.app.wss = self
|
self.app.wss = self
|
||||||
@ -58,14 +72,24 @@ class Wss:
|
|||||||
handler = self.recvdata_handler
|
handler = self.recvdata_handler
|
||||||
await handler(data)
|
await handler(data)
|
||||||
|
|
||||||
|
def add_peer(self, info):
|
||||||
|
self.peers = [ i for i in self.peers if i.id != info.id ]
|
||||||
|
self.peers.append(info)
|
||||||
|
|
||||||
|
def delete_peer(self, info):
|
||||||
|
self.peers = [ i for i in self.peers if i.id != info.id ]
|
||||||
|
|
||||||
async def recvdata_handler(self, data):
|
async def recvdata_handler(self, data):
|
||||||
if data.type == 'info':
|
if data.type == 'login':
|
||||||
|
self.add_peer(data.msgfrom)
|
||||||
return
|
return
|
||||||
if data.type == 'session'
|
if data.type == 'logout':
|
||||||
h = self.sessionhandlers.get(data.sessiontype)
|
self.delete_peer(data.msgfrom)
|
||||||
|
return
|
||||||
|
if data.type == 'new_session'
|
||||||
|
h = self.sessionhandlers.get(data.session.sessiontype)
|
||||||
i = h(data.from)
|
i = h(data.from)
|
||||||
k = data.get(self.handler_name)
|
k = data.session.sessionid
|
||||||
self.add_handler(k, i.recvdata_handler)
|
self.add_handler(k, i.recvdata_handler)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -81,7 +105,7 @@ class Wss:
|
|||||||
await self.start()
|
await self.start()
|
||||||
|
|
||||||
async def send(self, dic):
|
async def send(self, dic):
|
||||||
dic['from'] = self.info
|
dic.msgfrom = self.info
|
||||||
txt = json.dumps(dic)
|
txt = json.dumps(dic)
|
||||||
try:
|
try:
|
||||||
return await self.ws.send(txt)
|
return await self.ws.send(txt)
|
||||||
@ -89,14 +113,30 @@ class Wss:
|
|||||||
await self.restart()
|
await self.restart()
|
||||||
return self.send(dic)
|
return self.send(dic)
|
||||||
|
|
||||||
|
async def new_session(self, sessiontype, opts):
|
||||||
|
k = self.sessionhandlers.get(sessiontype)
|
||||||
|
if k is None:
|
||||||
|
e = Exception(f'Sessiontype({sessiontype}) not registed')
|
||||||
|
exception(f'new_session() exception {e}')
|
||||||
|
raise e
|
||||||
|
d = DictObject()
|
||||||
|
d.type = 'new_session'
|
||||||
|
d.msgfrom = self.info
|
||||||
|
sessionid = getID()
|
||||||
|
d.session = DictObject(sessiontype=sessiontype, sessionid=sessionid)
|
||||||
|
await self.send(d)
|
||||||
|
h = k(self, sessionid, opts)
|
||||||
|
self.add_sessionhandler(sessionid, h.recvdata_handler)
|
||||||
|
return h
|
||||||
|
|
||||||
async def login(self):
|
async def login(self):
|
||||||
d = DictObject()
|
d = DictObject()
|
||||||
d['from'] = self.info
|
d.msgfrom = self.info
|
||||||
d.type = 'login'
|
d.type = 'login'
|
||||||
await self.send(d)
|
await self.send(d)
|
||||||
|
|
||||||
async def logout(self):
|
async def logout(self):
|
||||||
d = DictObject()
|
d = DictObject()
|
||||||
d['from'] = self.info
|
d.msgfrom = self.info
|
||||||
d.type = 'logout'
|
d.type = 'logout'
|
||||||
await self.send(d)
|
await self.send(d)
|
||||||
|
Loading…
Reference in New Issue
Block a user