<bigwig> service: chat


service {
  shared string msg0, msg1, msg2, msg3, msg4;
  
  resource msg ;
  
  html Logon = <html> <head><title>Chat Room</title></head><body>
    <h1>Welcome to The Chat Room</h1>
    Please enter your on-line name:
    <input name="name" type="text" size=25>
  </body> </html>;
  html Update = <html> <head><title>Chat Room</title></head><body>
    <h1>The Chat Room Service</h1>
    <hr>
    <b>Messages so far:</b>
    <br>
    <[msg0]><br><[msg1]><br><[msg2]><br><[msg3]><br><[msg4]><br>
    <hr>
    <b>Your new message:</b>
    <br>
    <input name="msg" type="text" size=50>
    <br>
    <hr>
    <br>
    Quit now? ( <input name="quit" type="radio" value="true"> Yes /
    <input name="quit" type="radio" checked value="false"> No )

  </body> </html>;
  html ByeBye = <html> <head><title>Chat Room</title></head><body>
    <h1>Thanks for using The Chat Room</h1>
    You made <[conns]> connections
    and wrote <[msgs]> messages.
  </body> </html>;
  
  session Chat() {
    html H;
    bool quit;
    string name, msg;
    int connections, written;
    
    show Logon receive [name=name];
    while (!quit) {
      reader (msg) {
        H = Update <[msg0=msg0, 
            msg1=msg1, 
            msg2=msg2, 
            msg3=msg3, 
            msg4=msg4];
      }
      show H receive [msg=msg, quit=quit];
      connections = connections + 1;
      if (msg != "") {
        written = written + 1;
        writer (msg) {
          msg0 = msg1;
          msg1 = msg2;
          msg2 = msg3;
          msg3 = msg4;
          msg4 = name + "> " + msg;
        }
      }
    }
    exit ByeBye <[conns=connections, 
        msgs=written];
  }
}