a
    i                     @   s  d dl 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d dlZd dlZd dlm	Z	 d dl
mZ d dlZd dlZd dlT d dlT d dlmZmZ d dlT d dlZd dlmZmZmZ d dlZd dlZd dlmZ d dlmZ d d	lmZmZm Z  d d
l!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 e9e:Z;e$  e%  e<d e"ej=dZ>dZ?e, Zd dl@mAZAmBZB d dlCmDZD dd ZEe:dkre FeE  dS )    N)date)server)*)saveGameAsyncloadGameAsync)register_event_handlercall_event_handlerInvalidEventError)RateLimiterconfig)register_eventget_applicable_eventsevent_count)PlayerCache)register_all_event_handlersregister_all_events)UserRegistryUSERSget_websocket_for_player)BatchedUpdateserverClassComplexHandler
sendToUsersendEventMessagesendUserInfosendDict)startshutdownerrorevery_minutehandlerinitialize_dummy_userstartup)max_sizeF)producer_handlerconsumer_handler)iterateGamesc            
         s  t  } |  }| tj|jd  ddlm} ddl	m	} ||j
dI d H  td|j
  td ddlm} ddlm} | I d H  | I d H  td	 ttjd
d}td ttd|I d H }td|  t t }t dI d H  t I d H  |I d H  td |  z$t j| ddI d H  td W n t jy\   td Y n0 |  z|I d H  W n t j y   Y n0 ddlm!}	 |	 I d H  td td d S )Nr   )initialize_poolr   )	pool_sizez+Database connection pool initialized: size=z!Initializing retention systems...)initialize_quest_templates)initialize_daily_rewardszRetention systems initializedPORT8001z
running... z#WebSocket server listening on port    zShutting down gracefully...g      @)timeoutzWebSocket server closedz2WebSocket server close timed out, forcing shutdown)
close_poolzDatabase pool closedzShutdown complete)"asyncioget_running_loopcreate_futureadd_signal_handlersignalSIGTERM
set_resultdatabase_asyncr(   r   MAX_CONNECTIONSprintretention.daily_questsr*   retention.daily_rewardsr+   intosenvironget
websocketsserver!   create_taskr    sleepr"   closewait_forwait_closedTimeoutErrorcancelCancelledErrorr1   )
loopstopr(   r   r*   r+   port	ws_serverZminute_taskr1    rP   $/var/www/lichun.app/lichun/ws/app.pymain8   sJ    
rR   __main__)Gr2   datetimetimejsoncProfiler?   randomr6   	tracebackr   httpr   loggingrB   events	functionsr   r   intradayActivitytutorial_eventsevent_handlersr   r   r	   	dayEventsconversationEventsrate_limiterr
   r   event_registryr   r   r   player_cacher   server.event_registrationr   r   server.websocket_registryr   r   r   server.websocket_messagingr   r   r   r   r   r   r   server.websocket_handlersr   r   r   r    r!   r"   	getLogger__name__loggerr;   r:   playerRecordslastIterationgame_loop.producer_consumerr%   r&   game_loop.loop_managerr'   rR   runrP   rP   rP   rQ   <module>   sP   $ 
A
