分散式即时通讯协定

dimp的Python项目详细描述


分散式即时消息传递协议(python)

licenseVersionPRs WelcomePlatform

说话很便宜,给你看密码!

依赖性

pip3installdimp

公共扩展

facebook.py

classFacebook(Barrack):""" Access database to load/save user's private key, meta and profiles """defsave_private_key(self,private_key:PrivateKey,identifier:ID)->bool:# TODO: save private key into safety storagepassdefsave_meta(self,meta:Meta,identifier:ID)->bool:ifnotmeta.match_identifier(identifier):returnFalse# TODO: save meta to local/persistent storagepassdefsave_profile(self,profile:Profile)->bool:ifnotself.verify_profile(profile):returnFalse# TODO: save to local storagepassdefverify_profile(self,profile:Profile)->bool:ifprofileisNone:returnFalseelifprofile.valid:# already verifiedreturnTrueidentifier=profile.identifiermeta=Noneifidentifier.type.is_user():# verify with user's meta.keymeta=self.meta(identifier=identifier)elifidentifier.type.is_group():# verify with group owner's meta.keygroup=self.group(identifier=identifier)ifgroupisnotNone:meta=self.meta(identifier=group.owner)ifmetaisnotNone:returnprofile.verify(public_key=meta.key)##   ISocialNetworkDataSource#defuser(self,identifier:ID)->User:entity=super().user(identifier=identifier)ifentityisnotNone:returnentitymeta=self.meta(identifier=identifier)ifmetaisnotNone:key=self.private_key_for_signature(identifier=identifier)ifkeyisNone:entity=User(identifier=identifier)else:entity=LocalUser(identifier=identifier)self.cache_user(user=entity)returnentitydefgroup(self,identifier:ID)->Group:entity=super().group(identifier=identifier)ifentityisnotNone:returnentitymeta=self.meta(identifier=identifier)ifmetaisnotNone:entity=Group(identifier=identifier)self.cache_group(group=entity)returnentity##  global#facebook=Facebook()

keystore.py

classKeyStore(KeyCache):""" For reuse symmetric key """defsave_keys(self,key_map:dict)->bool:# TODO: save to local cachepassdefload_keys(self)->dict:# TODO: load from local cachepass##  global#keystore=KeyStore()

messanger.py

classMessanger(Transceiver,ITransceiverDelegate):""" Transform and send message """def__init__(self):super().__init__()self.delegate=self##  ITransceiverDelegate#defsend_package(self,data:bytes,handler:ICompletionHandler)->bool:# TODO: send out datapassdefupload_data(self,data:bytes,msg:InstantMessage)->str:# TODO: upload onto FTP serverpassdefdownload_data(self,url:str,msg:InstantMessage)->bytes:# TODO: download from FTP serverpass##  global#messanger=Messanger()messanger.barrack=facebookmessanger.key_cache=keystore

用户帐户

register.py

defregister(username:str)->User:# 1. generate private keysk=PrivateKey({'algorithm':'RSA'})# 2. generate meta with username(as seed) and private keymeta=Meta.generate(private_key=sk,seed=username)# 3. generate ID with network type by metaidentifier=meta.generate_identifier(network=network)# 4. save private key and meta infofacebook.save_private_key(private_key=sk,identifier=identifier)facebook.save_meta(meta=meta,identifier=identifier)# 5. create user with IDreturnfacebook.user(identifier)

信息

发送.py

defpack(content:Content,sender:ID,receiver:ID)->ReliableMessage:msg=InstantMessage.new(content=content,sender=sender,receiver=receiver)returnmessanger.encrypt_sign(msg)if__name__=='__main__':moki=ID("moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk");hulk=ID("hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj");content=TextContent.new(text='Hello world!')msg=pack(content=content,sender=moki,receiver=hulk)# TODO: send out the request datarequest=json.dumps(msg)+'\n'data=request.encode('utf-8')

接收.py

defreceive(pack:bytes)->InstantMessage:msg=json.loads(pack.decode('utf-8'))r_msg=ReliableMessage(msg)i_msg=messanger.verify_decrypt(r_msg)# TODO: process message contentpass

版权所有©2019 Albert Moky

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleFramework和工厂方法   Java适当地处理异常   java单例类不起作用   java小程序和Swing在eclipse中不显示组件   多个键上的java Redisson FastRemove不起作用   java验证请求正文不等于模式   在Java中从URL读取数据   eche RecyclerView项的java Set自定义字体   string Java如何从Date获取HH:mm:ss   当Java应用程序落后于负载均衡器时,在某些URL上强制使用SSL   使用esapi时发生java错误   java使用流根据第二个列表中的值更新一个列表中的对象   组织。openqa。硒。Java中的NoTouchElementException WebDriver?   从JSON字符串Java创建CSV文件