Example #1
0
		public static void Main(string[] args)
		{
			ManualResetEvent Terminated = new ManualResetEvent(false);

			Initialize();

			Console.Out.WriteLine("Move the mouse to move the pointer on the screen.");
			Console.Out.WriteLine("Press left mouse button while moving to draw.");
			Console.Out.WriteLine("Press the ESC key to close the application.");
			Console.Out.WriteLine("You will be able to see what others draw as well.");

			OnKeyDown += (sender, e) =>
			{
				if (e.Key == Key.Escape || (e.Key == Key.C && e.Control))
					Terminated.Set();
			};

			FillRectangle(0, 0, ScreenWidth, ScreenHeight, C64Colors.Blue);

			int PointerTexture = AddSpriteTexture(GetResourceBitmap("Pointer.png"), System.Drawing.Color.FromArgb(0, 0, 255), true);
			Point P = GetMousePointer();
			Point LastP = P;
			Sprite Pointer = CreateSprite(P.X, P.Y, PointerTexture);
			Random Rnd = new System.Random();
			int R = Rnd.Next(128, 255);
			int G = Rnd.Next(128, 255);
			int B = Rnd.Next(128, 255);
			Color Color = Color.FromArgb(R, G, B);
			bool Draw = false;
			BinaryOutput Payload;

			using (MqttConnection MqttConnection = ConnectToMqttServer("iot.eclipse.org", false, string.Empty, string.Empty))
			{
				WriteLine("<" + MqttConnection.State.ToString() + ">", C64Colors.LightGreen);

				MqttConnection.TrustServer = true;

				MqttConnection.OnConnectionError += (sender, ex) =>
				{
					WriteLine("Unable to connect:", C64Colors.Red);
				};

				MqttConnection.OnError += (sender, ex) =>
				{
					WriteLine(ex.Message, C64Colors.Red);
				};

				MqttConnection.OnStateChanged += (sender, state) =>
				{
					WriteLine("<" + MqttConnection.State.ToString() + ">", C64Colors.LightGreen);

					if (state == MqttState.Connected)
						MqttConnection.SUBSCRIBE("RetroSharp/Examples/Networking/MultiUserDraw");
				};

				OnMouseMove += (sender, e) =>
				{
					P = e.Position;
					Pointer.SetPosition(P);

					int DX = P.X - RasterWidth / 2;
					int DY = P.Y - RasterHeight / 2;

					Pointer.Angle = 90 + 22.5 + System.Math.Atan2(DY, DX) * 180 / System.Math.PI;

					if (Draw)
					{
						Payload = new BinaryOutput();
						Payload.WriteString(MqttConnection.ClientId);
						Payload.WriteInt(LastP.X);
						Payload.WriteInt(LastP.Y);
						Payload.WriteInt(P.X);
						Payload.WriteInt(P.Y);
						Payload.WriteColor(Color);

						MqttConnection.PUBLISH("RetroSharp/Examples/Networking/MultiUserDraw", MqttQualityOfService.AtMostOne, false, Payload);

						DrawLine(LastP.X, LastP.Y, P.X, P.Y, Color);
					}

					LastP = P;
				};

				OnMouseDown += (sender, e) =>
				{
					Draw = e.LeftButton;
				};

				OnMouseUp += (sender, e) =>
				{
					Draw = e.LeftButton;
				};

				MqttConnection.OnContentReceived += (sender, Content) =>
				{
					BinaryInput Input = Content.DataInput;
					string ClientId = Input.ReadString();
					if (ClientId != MqttConnection.ClientId)
					{
						int X1 = (int)Input.ReadInt();
						int Y1 = (int)Input.ReadInt();
						int X2 = (int)Input.ReadInt();
						int Y2 = (int)Input.ReadInt();
						Color cl = Input.ReadColor();

						DrawLine(X1, Y1, X2, Y2, cl);
					}
				};

				while (!Terminated.WaitOne(1000))
					;
			}

			Terminate();
		}