1 using System;
2 using System.Drawing;
3 using System.Reactive.Linq;
4 using System.Windows.Forms;
5 
6 namespace RxMouseServer
7 {
8     partial class Program
9     {
10         [STAThread]
Main(string[] args)11         static void Main(string[] args)
12         {
13             Console.WriteLine("Server");
14 
15             int port;
16             ParseArgs(args, out port);
17 
18             var observer = Remoting(port);
19 
20             var frm = new Form();
21 
22             frm.Load += (o, e) =>
23             {
24                 var g = frm.CreateGraphics();
25 
26                 var mme = (from mm in Observable.FromEventPattern<MouseEventArgs>(frm, "MouseMove")
27                            select mm.EventArgs.Location)
28                           .DistinctUntilChanged()
29                           .Do(pt =>
30                           {
31                               g.DrawEllipse(Pens.Red, pt.X, pt.Y, 1, 1);
32                           });
33 
34                 mme.Subscribe(observer);
35             };
36 
37             Application.Run(frm);
38         }
39 
ParseArgs(string[] args, out int port)40         static void ParseArgs(string[] args, out int port)
41         {
42             port = 9090;
43 
44             if (args.Length == 1)
45             {
46                 port = int.Parse(args[0]);
47             }
48         }
49     }
50 }
51