Chat.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Threading;
  3. using WebSocketSharp;
  4. using WebSocketSharp.Server;
  5. namespace Example3
  6. {
  7. public class Chat : WebSocketBehavior
  8. {
  9. private string _name;
  10. private static int _number = 0;
  11. private string _prefix;
  12. public Chat ()
  13. {
  14. _prefix = "anon#";
  15. }
  16. public string Prefix {
  17. get {
  18. return _prefix;
  19. }
  20. set {
  21. _prefix = !value.IsNullOrEmpty () ? value : "anon#";
  22. }
  23. }
  24. private string getName ()
  25. {
  26. var name = QueryString["name"];
  27. return !name.IsNullOrEmpty () ? name : _prefix + getNumber ();
  28. }
  29. private static int getNumber ()
  30. {
  31. return Interlocked.Increment (ref _number);
  32. }
  33. protected override void OnClose (CloseEventArgs e)
  34. {
  35. if (_name == null)
  36. return;
  37. var fmt = "{0} got logged off...";
  38. var msg = String.Format (fmt, _name);
  39. Sessions.Broadcast (msg);
  40. }
  41. protected override void OnMessage (MessageEventArgs e)
  42. {
  43. var fmt = "{0}: {1}";
  44. var msg = String.Format (fmt, _name, e.Data);
  45. Sessions.Broadcast (msg);
  46. }
  47. protected override void OnOpen ()
  48. {
  49. _name = getName ();
  50. var fmt = "{0} has logged in!";
  51. var msg = String.Format (fmt, _name);
  52. Sessions.Broadcast (msg);
  53. }
  54. }
  55. }