Exemplo n.º 1
0
	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)
Exemplo n.º 2
0
	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)
Exemplo n.º 3
0
	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))