Advertisement
Guest User

Untitled

a guest
Sep 17th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.32 KB | None | 0 0
  1. import std.stdio;
  2. import std.socket;
  3. import std.conv;
  4. import core.thread;
  5.  
  6. class ClientFiber : Fiber {
  7.   private Socket sock;
  8.   this(Socket s) {
  9.     this.sock = s;
  10.     super(&run);
  11.   }
  12.   private void run() {
  13.     while(true) {
  14.       sock.send("hi!");
  15.       Fiber.yield();
  16.     }
  17.   }
  18. }
  19.  
  20. int main(string[] args)
  21. {
  22.   if(args.length == 1)
  23.   {
  24.     auto listener = new Socket(AddressFamily.INET, SocketType.STREAM);
  25.     listener.bind(new InternetAddress(2525));
  26.     listener.listen(10);
  27.     Fiber[] fibers;
  28.  
  29.     void listen() {
  30.       writeln("listen");
  31.       Socket newclient;
  32.       while(listener.isAlive()) {
  33.         newclient = listener.accept();
  34.         Fiber clientfiber = new ClientFiber(newclient);
  35.         fibers ~= clientfiber;
  36.         Fiber.yield();
  37.       }
  38.     }
  39.  
  40.     Fiber listenFiber = new Fiber(&listen);
  41.     fibers ~= listenFiber;
  42.  
  43.     while(true) {
  44.       foreach(f; fibers) {
  45.         f.call();
  46.         writeln("cf");
  47.       }
  48.     }
  49.   }
  50.   else
  51.   {
  52.     auto sock = new Socket(AddressFamily.INET, SocketType.STREAM);
  53.     sock.connect(new InternetAddress("127.0.0.1", 2525));
  54.     while(true) {
  55.       byte[1024] buf;
  56.       int len = sock.receive(buf);
  57.       if(len > 0) {
  58.         string s = (cast(immutable(char)*)buf)[0..len];
  59.         writeln(s);
  60.       }
  61.     }
  62.   }
  63.  
  64.   return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement