P2Pで将棋(の準備)
XMLRPC は難しいのかと思えば、 smallp2p など参考にすると意外に易しいのかも。 鯖立てるのは下記のようなコード server.py でとりあえず可能でした。
#!/usr/bin/env python from SimpleXMLRPCServer import SimpleXMLRPCServer import sys, socket class RPCMethods: def next(self, s=''): print 'received:', s return 0 def main(): sv = SimpleXMLRPCServer((socket.gethostname(), int(sys.argv[1]))) sv.register_instance(RPCMethods()) sv.serve_forever() if __name__ == "__main__": main()
起動は
$ python server.py <ポート番号>
一方クライアント側のコード client.py はもっと簡単、
#!/usr/bin/env python import sys, xmlrpclib def main(): peer = xmlrpclib.ServerProxy('http://' + sys.argv[1]) s = raw_input('>>') while s: peer.next(unicode(s, 'euc_jp')) s = raw_input('>>') if __name__ == "__main__": main()
下記コマンドで起動します。
$ python crient.py <鯖のURL:ポート番号>これでクライアント側で入力した文字がサーバ側に表示されるはずです。
双方向にすれば、チャットのようなソフトができあがります。 たとえば将棋盤にくっつければ即P2P将棋が出来るはずです。 Zope鯖に組み込んでも面白そう。 Python のすごさを実感しました。
技術的にはありふれたもので、他所かに載ってそうなコードですが、 これは BBS での会話 の証拠のつもり。今の仕事を早く終わらせて、作ってみたいなーと現実から逃れてます。