50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
from datetime import datetime
|
|
from kafka import KafkaProducer
|
|
|
|
# Actions
|
|
def messages(client_id, room, action, _input, sender, receiver=None):
|
|
return {
|
|
'types': [action],
|
|
'messages': [
|
|
{
|
|
'client': client_id, 'room': room, 'action': action,
|
|
'sender': sender, 'receiver': receiver,
|
|
'input': _input,
|
|
'creatred': datetime.now()
|
|
}
|
|
]
|
|
}
|
|
|
|
|
|
def enter_action(state, room, user):
|
|
def f(_g, step, sL, s, kafkaConfig):
|
|
msgs = messages(state, room, 'enter', f"{user} enters {room}", user)
|
|
msgs['send_times'] = [0.000000]
|
|
msgs['msg_counts'] = [len(msgs['messages'])]
|
|
return msgs
|
|
return f
|
|
|
|
def message_actions(state, room, _input, sender, receiver):
|
|
msgs = messages(state, room, 'send', _input, sender, receiver)
|
|
msgs_list = msgs['messages']
|
|
def send_action(_g, step, sL, s, kafkaConfig):
|
|
start_time = datetime.now()
|
|
for msg in msgs_list:
|
|
producer: KafkaProducer = kafkaConfig['producer']
|
|
topic: str = kafkaConfig['send_topic']
|
|
encoded_msg = str(msg).encode('utf-8')
|
|
producer.send(topic, encoded_msg)
|
|
msgs['send_times'] = [(datetime.now() - start_time).total_seconds()]
|
|
msgs['msg_counts'] = [len(msgs_list)]
|
|
return msgs
|
|
|
|
return send_action
|
|
|
|
def exit_action(state, room, user):
|
|
def f(_g, step, sL, s, kafkaConfig):
|
|
msgs = messages(state, room, 'exit', f"{user} exited {room}", user)
|
|
msgs_list = msgs['messages']
|
|
msgs['send_times'] = [0.000000]
|
|
msgs['msg_counts'] = [len(msgs_list)]
|
|
return msgs
|
|
return f |