PaintCoordinator.cs
上传用户:yiyuerguo
上传日期:2014-09-27
资源大小:3781k
文件大小:2k
源码类别:

C#编程

开发平台:

Others

  1. using System;
  2. using System.Runtime.Remoting.Messaging;
  3. using System.Collections;
  4. using System.Drawing;
  5. using System.Drawing.Drawing2D;
  6. using System.Xml;
  7. using System.Xml.Serialization;
  8. //namespace PaintCoordinator
  9. //{
  10. //Class Coordinator
  11. public class Coordinator: MarshalByRefObject
  12. {
  13. public Coordinator() {
  14. Console.WriteLine("Coordinator has been created...");
  15. }
  16. //声明NewStroke事件,客户端将会订阅此事件
  17. public event NewStrokeEventHandler NewStroke;
  18. //忽略默认的对象租用行为,使对象始终保存在内存中
  19. public override object InitializeLifetimeService() {
  20. return null;
  21. }
  22. //Define GetCurrentTime(), return the system's time
  23. public string GetCurrentTime() {
  24. return DateTime.Now.ToLongTimeString();
  25. }
  26. //定义DrawStroke处理程序,当某一个客户端远程调用此函数时,将会触发NewStroke事件,从而使得所有订阅NewStroke事件的客户端都会受到此事件
  27. [OneWay]
  28. public void DrawStroke(Stroke stroke) {
  29. if(NewStroke!=null)
  30. NewStroke(stroke);
  31. }
  32. }
  33. //Class Stroke
  34. [Serializable]
  35. public class Stroke {
  36. //Store the width of pen
  37. int penWidth;
  38. //Store the color of pen
  39. Color penColor;
  40. ArrayList Points=new ArrayList();
  41. //Constructor
  42. public Stroke(){
  43. }
  44. public Stroke(int x,int y) {
  45. Points.Add(new Point(x,y));
  46. }
  47. //属性
  48. public int PenWidth {
  49. get 
  50. {
  51. return penWidth;
  52. }
  53. set
  54. {
  55. penWidth=value;
  56. }
  57. }
  58. public Color PenColor {
  59. get
  60. {
  61. return penColor;
  62. }
  63. set
  64. {
  65. penColor=value;
  66. }
  67. }
  68. public int Count {
  69. get
  70. {
  71. return Points.Count;
  72. }
  73. }
  74. //
  75. public void Add(int x,int y) {
  76. Points.Add(new Point(x,y));
  77. }
  78. //DrawStroke函数用于将此线条绘出
  79. public void DrawStroke(Graphics g) {
  80. Pen pen=new Pen(penColor,penWidth);
  81. for(int i=0;i<Points.Count-1;i++) {
  82. g.DrawLine(pen,(Point)Points[i],(Point)Points[i+1]);
  83. }
  84. pen.Dispose();
  85. }
  86. }
  87. //Class RemoteDelegateObject
  88. public abstract class ReomteDelegateObject: MarshalByRefObject {
  89. public void NewStrokeCallback(Stroke stroke) {
  90. InternalNewStrokeCallback(stroke);
  91. }
  92. protected abstract void InternalNewStrokeCallback(Stroke stroke);
  93. }
  94.     //声明一个委托
  95. public delegate void NewStrokeEventHandler(Stroke stroke);
  96. //}