3
Õ¡2^î   ã               @   sÖ  d dl mZ d dlmZmZmZ d dl mZmZmZmZ d dl	m
Z
 d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZeedd�Zd	e_d
ejd< eeƒZejdƒZejZejZejjƒ Ze
ƒ Zee ƒZej!dƒdd„ ƒZ"ej#dƒdd„ ƒZ$ej#dƒdd„ ƒZ%ej#dƒdd„ ƒZ&ej#dƒdd„ ƒZ'ej#dƒdd„ ƒZ(ej#dƒdd „ ƒZ)ej#d!ƒd"d#„ ƒZ*ej#d$ƒd%d&„ ƒZ+ej#d'ƒd(d'„ ƒZ,ej#d)ƒd*d)„ ƒZ-ej#d+ƒd,d+„ ƒZ.ej#d-ƒd.d/„ ƒZ/ed0k�rÒej0d1d2� dS )3é    )ÚFlask)ÚSocketIOÚemitÚ	join_room)r   Úrender_templateÚsessionÚrequest)ÚAPI)ÚdefaultdictNÚtemplate)Ztemplate_folderTZnuttertoolsZ
SECRET_KEYzmongodb://localhost:27017/ú/c               C   s   t dƒS )Nz
index.html)r   © r   r   ú+/home/codelabs/socketengine/socketengine.pyÚchat   s    r   Útestc             C   s   t jj| ƒ d S )N)ÚappÚloggerÚdebug)r   r   r   r   r   !   s    Útypingc             C   s   t d| | d d� d S )NZincoming_typingÚroom_id)Úroom)r   )Údatar   r   r   Úreceive_typing%   s    r   Z
stoptypingc             C   s   t d| | d d� d S )NZincoming_stop_typingr   )r   )r   )r   r   r   r   Úreceive_stop_typing+   s    r   Zstart_broadcastc             C   sŽ   t jjdƒ t| d ƒ}yXtjd|iƒ}t jjdƒ t jj| ƒ t jj|d ƒ td| |d d� t jjdƒ W n   t jjd	ƒ Y nX d S )
Nzemit to broadcast_messageZ	target_idÚ_idz1****************** SID Found ********************ÚuidZbroadcast_message)r   z/****************** SID End ********************z(SID NOT FOUND WHEN INVITE OR CREATE ROOM)r   r   r   ÚintÚuserColÚfind_oner   )r   r   Údatafindr   r   r   Útest_broadcast1   s    r    Zstart_connectc          
   C   s„   yrt | d ƒ}|tjdœ}tjd|iƒ}|rHddtjii}tj||ƒ n
tj|ƒ tjj	t
|ƒd t
tjƒ ƒ W n   Y nX d S )NÚid)r   r   r   z$setr   z Connection Established )r   r   Úsidr   r   Z
update_oneZ
insert_oner   r   r   Ústr)r   r   Úudatar   Ú
new_valuesr   r   r   Úon_start_roomM   s    
"r&   r   c             C   sH   | d }| d }|dkr8t jjdt|ƒ d t|ƒ ƒ tt|ƒƒ d S )Nr   Ú	author_idi@â zreceive join data with room z author )r   r   r   r#   r   )r   r   Úauthorr   r   r   Úon_join_room^   s
     r)   Z
enter_roomc             C   s´   t jj| ƒ | d }| d }tjdt|ƒiƒ}|r¤t jj|ƒ ddt|ƒii}tj||ƒ td| |d� t	j
t|ƒt|ƒƒ}t jj|ƒ t jj|d d tj ƒ nt jjd	ƒ d S )
Nr   r'   r   z$setZupdate_read)r   z enter_room z	with SID z	not found)r   r   r   r   r   r   r#   Úupdater   ÚapiZupdate_read_messager   r"   )r   r   r'   r   r%   Úpostr   r   r   Úon_enter_roomg   s    r-   Z	exit_roomc             C   sh   | d }t | d ƒ}tjjdƒ tjd|iƒ}|rXtjj|ƒ dddii}tj||ƒ ntjjdƒ d S )Nr   r'   z5exit room ************************************#%@#%@#r   z$unsetÚ z	not found)r   r   r   r   r   r   r*   )r   r   r'   r   r%   r   r   r   Úon_exit_room{   s    r/   Úchange_topicc             C   sX   t jjdƒ | d }| d }| d }| d }| d }tj|||||ƒ}td| |d� d S )	Nr0   r   Úroler'   ÚmessageÚtypeÚroom_incoming_message)r   )r   r   r   r+   Úpost_messager   )r   r   r1   r(   r2   Útype_mesr,   r   r   r   r0   Š   s    Úroom_messagec          
   C   s„  t jj| ƒ | d }| d }| d }| d }| d }| d }| d }| d }| d	 }	| d
 }
tj|||||	ƒ}t jj|ƒ td| |d� tj|dt|ƒidœƒ}|�r>t jjdƒ td| |d� tj	||ƒ}| d }|j
dƒ}ttd |ƒƒ}xL|D ]D}t|ƒ}tj|||||	|||
ƒ}t jjdt|ƒ ƒ t jj|ƒ qòW �nB|dk�r¢t jjdƒ | d }t jj|ƒ tjdt|ƒiƒ}|d k	�r€d|k�r€td| |d d� nÞ| d }|j
dƒ}ttd |ƒƒ}x¼|D ]´}t|ƒ}tj|||||	|||
ƒ}t jjdt|ƒ ƒ t jj|ƒ tjdt|ƒiƒ}t jjdƒ t jj|ƒ t jjdƒ |d k	�rÈd|k�rÈtd| |d d� td| |d d� �qÈW d S )Nr   r'   Únamer1   ÚdateÚtimeÚkickr2   r3   Úcategoryr4   )r   z$ne)r   r   z5******** ada user di dalam room yang sama ********** Zupdate_read_in_roomZ
ListMemberú,zsend_notif to member id : Znonez#Kick---------------------------Kickr   r   Zdelete_roomz1****************** SID Found ********************z1****************** SID End   ********************Znew_message_countZalert_message)r   r   r   r+   r5   r   r   r   r   Zupdate_read_message_in_roomÚsplitÚlistÚfilterr#   Z
send_notif)r   r   r(   Zauthor_namer1   r9   r:   r;   r2   r6   r<   r,   r   Zlist_memberZraw_listZ	data_listÚxZ	member_idZ
post_notifr   r   r   r7   •   sb    




Úconnectc               C   s(   t jjdttjƒ ƒ tdddd� d S )NzMade Connection Z
on_connectzYou ConnectedT)Ú	broadcast)r   r   r   r#   r   r"   r   r   r   r   r   rB   ó   s    Z
disconnectc              C   sb   t jjttjƒd ƒ tjdtjiƒ} | rRt jj| ƒ ddddœi}tj| |ƒ nt jjdƒ d S )Nz Disconnectedr   z$unsetr.   )r   r   z	not found)	r   r   r   r#   r   r"   r   r   r*   )r   r%   r   r   r   Útest_disconnectú   s    rD   Ú__main__z0.0.0.0)Úhost)1Zflaskr   Zflask_socketior   r   r   r   r   r   Zapi.api_requestr	   Úcollectionsr
   ÚloggingÚdatetimeÚjsonÚsysÚosZpymongoÚ__name__r   r   ÚconfigZsocketioZMongoClientÚconnZsocketDBÚdbZusersr   Únowr+   r?   Zrouter   Úonr   r   r   r    r&   r)   r-   r/   r0   r7   rB   rD   Úrunr   r   r   r   Ú<module>   sF   


	^
