Guest User

Untitled

a guest
Mar 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. #![feature(try_from)]
  2. #![feature(ip_constructors)]
  3.  
  4. extern crate tokio;
  5. extern crate futures;
  6. extern crate sodiumoxide;
  7. extern crate secret_stream;
  8. extern crate ssb_keyfile;
  9. extern crate ssb_common;
  10. extern crate ssb_client;
  11. extern crate ssb_rpc;
  12. extern crate serde;
  13. #[macro_use]
  14. extern crate serde_derive;
  15. extern crate serde_json;
  16.  
  17. use std::net::{SocketAddr, Ipv6Addr};
  18. use std::convert::TryInto;
  19.  
  20. use tokio::executor::current_thread;
  21. use tokio::net::TcpStream;
  22. use tokio::io::AsyncRead;
  23. use futures::prelude::*;
  24. use futures::future::ok;
  25.  
  26. use secret_stream::OwningClient;
  27. use sodiumoxide::crypto::box_;
  28.  
  29. use ssb_keyfile::load_or_create_keys;
  30. use ssb_common::{MAINNET_IDENTIFIER, DEFAULT_TCP_PORT};
  31. use ssb_common::links::MessageId;
  32.  
  33. use ssb_client::ssb;
  34. use serde_json::Value;
  35. use ssb_rpc::ssb::{Latest, LatestItem};
  36.  
  37. #[derive(Debug, Deserialize)]
  38. struct Post {
  39. text: String,
  40. }
  41.  
  42. fn main() {
  43. sodiumoxide::init();
  44.  
  45. let (pk, sk) = load_or_create_keys().unwrap();
  46. let pk = pk.try_into().unwrap();
  47. let sk = sk.try_into().unwrap();
  48. let (ephemeral_pk, ephemeral_sk) = box_::gen_keypair();
  49.  
  50. let addr = SocketAddr::new(Ipv6Addr::localhost().into(), DEFAULT_TCP_PORT);
  51.  
  52. let do_stuff = TcpStream::connect(&addr)
  53. .and_then(move |tcp| {
  54. OwningClient::new(tcp,
  55. MAINNET_IDENTIFIER,
  56. pk,
  57. sk,
  58. ephemeral_pk,
  59. ephemeral_sk,
  60. pk)
  61. .map_err(|err| panic!("{:?}", err))
  62. })
  63. .map(|connection| {
  64. let (read, write) = connection.unwrap().split();
  65. let (mut client, receive, _) = ssb(read, write);
  66. current_thread::spawn(receive.map_err(|err| panic!("{:?}", err)));
  67.  
  68. let (req, responses) = client
  69. .muxrpc()
  70. .source::<_, LatestItem, Value>(&Latest::new());
  71.  
  72. current_thread::spawn(req.map_err(|err| panic!("{:?}", err)));
  73. current_thread::spawn(responses
  74. .for_each(|res| {
  75. println!("{:?}", res);
  76. ok(())
  77. })
  78. .map(|msg| println!("{:?}", msg))
  79. .map_err(|err| panic!("{:?}", err)));
  80.  
  81. // let (req, res) = client
  82. // .get::<Post>("%Igm25FZEje8LeruZ0MnCajFz9e1LoMO3EHB5C0fRMmw=.sha256"
  83. // .parse::<MessageId>()
  84. // .unwrap());
  85. // current_thread::spawn(req.map_err(|err| panic!("{:?}", err)));
  86. // current_thread::spawn(res.map(|msg| println!("{:?}", msg))
  87. // .map_err(|err| panic!("{:?}", err)));
  88. })
  89. .map_err(|err| panic!("{:?}", err));
  90.  
  91. current_thread::run(|_| current_thread::spawn(do_stuff));
  92. }
Add Comment
Please, Sign In to add comment