def post(self): client_id = self.request.get('from') query=ChatRoom.all() query.filter("channel_client_list =",client_id) room_list=query.fetch(offset=0,limit=100) for room in room_list: Chat.remove_user(room.key(),client_id) logging.info("### disconnect user "+client_id)
def post(self): client_id = self.request.get('from') #PCではDisconnectは本当の切断時にしか来ないが、 #iOSでは時々、Disconnect->Connectで再接続が来る #そのため、クライアントIDを一度でも使ったことのあるルームを覚えておき、 #そこに再接続する必要がある #クライアントが属しているルームに接続通知を送る query=ChatRoom.all() query.filter("channel_client_list =",client_id) room_list=query.fetch(offset=0,limit=100) for room in room_list: Chat.user_update_notify(room) #再接続に対応するために属していたルームに再接続する query=ChatRoom.all() query.filter("channel_client_list_for_reconnect =",client_id) room_list=query.fetch(offset=0,limit=100) for room in room_list: if(not(client_id in room.channel_client_list)): Chat.add_user(room.key(),client_id) logging.info("### connect user "+client_id)
def tool(self,user): bbs=None bbs_key="" thread_key="" if(self.request.get("key")=="always"): try: room_key=ChatRoom.all().filter("is_always =",1).fetch(1)[0].key() except: room_key=None else: room_key=self.request.get("key") if(not room_key): Alert.alert_msg_with_write(self,"ルームキーが必要です。") return ipad=CssDesign.is_tablet(self) viewmode=self.request.get("viewmode") password=self.request.get("pass") try: room=ChatRoom.get(room_key)#db.get(room_key) except: room=None alert_footer=""#<BR><A HREF='./chat'><IMG SRC='./static_files/chat/logo.png'/></A>" login_message="" if(not user): login_url=users.create_login_url(self.request.url) login_message="<BR><A HREF='"+login_url+"' class='g-button'>Googleアカウントでログイン</A><BR>" if(not room): Alert.alert_msg_with_write(self,"このチャットルームは終了されています。"+alert_footer) return if(room.password and room.password!=password): Alert.alert_msg_with_write(self,"チャットルームのパスワードが一致しません。"+alert_footer) return #if(not user): # Alert.alert_msg_with_write(self,"チャットルームへの参加にはログインが必要です。<BR>"+login_message+alert_footer) # return canvas_width=room.canvas_width canvas_height=room.canvas_height if(user): user_id=user.user_id() #user_name=self.get_user_name(user) else: user_id=0 user_name=self.request.get("name") server_time=Chat.get_sec(datetime.datetime.now()) if(user): bbs_list=Bbs.all().filter("user_id =",user.user_id()).filter("del_flag =",0).fetch(limit=10) else: bbs_list=None quote_name=urllib.quote_plus(str(user_name)).replace("%","-") client_id=str(user_id)+"_"+str(server_time)+"_"+quote_name token = channel.create_channel(client_id) #排他制御が必要 Chat.add_user(room_key,client_id) template_values = { 'host': "./", 'bbs': bbs, 'bbs_key': bbs_key, 'thread_key': thread_key, 'entry_key': "", 'draw_time': "", 'canvas_width': canvas_width, 'canvas_height': canvas_height, 'canvas_url': "", 'reply': False, 'summary': "", 'author': "", 'title': "", 'chat': room_key, 'ipad': ipad, 'user_id':user_id, 'user_name':user_name, 'server_time':server_time, 'bbs_list':bbs_list, 'logined':True, 'viewmode':viewmode, 'room_name':room.name, 'token':token, 'client_id':client_id, 'is_english':CssDesign.is_english(self) } path = '/html/tools/draw_window_ipad.htm' self.response.out.write(template_select.render(path, template_values))