WingMan – Diff between revs 3 and 4
?pathlinks?
Rev 3 | Rev 4 | |||
---|---|---|---|---|
Line 1... | Line 1... | |||
1 | using System; |
1 | using System; |
|
- | 2 | using System.Collections.Concurrent; |
||
2 | using System.Collections.Generic; |
3 | using System.Collections.Generic; |
|
3 | using System.ComponentModel; |
4 | using System.ComponentModel; |
|
4 | using System.Data; |
5 | using System.Data; |
|
5 | using System.Drawing; |
6 | using System.Drawing; |
|
6 | using System.Globalization; |
7 | using System.Globalization; |
|
7 | using System.Linq; |
8 | using System.Linq; |
|
8 | using System.Net; |
9 | using System.Net; |
|
- | 10 | using System.Resources; |
||
9 | using System.Text; |
11 | using System.Text; |
|
10 | using System.Threading; |
12 | using System.Threading; |
|
11 | using System.Threading.Tasks; |
13 | using System.Threading.Tasks; |
|
12 | using System.Windows.Forms; |
14 | using System.Windows.Forms; |
|
- | 15 | using Gma.System.MouseKeyHook; |
||
13 | using WingMan.Communication; |
16 | using WingMan.Communication; |
|
14 | using WingMan.Host; |
17 | using WingMan.Host; |
|
Line 15... | Line 18... | |||
15 | |
18 | |
|
16 | namespace WingMan |
19 | namespace WingMan |
|
Line 23... | Line 26... | |||
23 | |
26 | |
|
Line 24... | Line 27... | |||
24 | private SemaphoreSlim MQTTServerSemaphore {get; set;} = new SemaphoreSlim(1, 1); |
27 | private SemaphoreSlim MQTTServerSemaphore {get; set;} = new SemaphoreSlim(1, 1); |
|
Line -... | Line 28... | |||
- | 28 | |
||
- | 29 | private SemaphoreSlim MQTTClientSemaphore { get; set; } = new SemaphoreSlim(1, 1); |
||
- | 30 | |
||
- | 31 | private static IKeyboardMouseEvents MouseKeyApplicationHook { get; set; } |
||
- | 32 | |
||
- | 33 | private static IKeyboardMouseEvents MouseKeyGlobalHook { get; set; } |
||
- | 34 | |
||
- | 35 | private List<string> MouseKeyCombo { get; set; } |
||
- | 36 | |
||
- | 37 | private HelmBindings HelmBindings { get; set; } |
||
- | 38 | |
||
- | 39 | private BindingSource HelmBindingSource { get; set; } |
||
25 | |
40 | |
|
26 | private SemaphoreSlim MQTTClientSemaphore { get; set; } = new SemaphoreSlim(1, 1); |
41 | public ConcurrentDictionary<string, HelmBindings> WingBindings { get; set; } |
|
27 | |
42 | |
|
Line -... | Line 43... | |||
- | 43 | public WingManForm() |
||
- | 44 | { |
||
28 | public WingManForm() |
45 | InitializeComponent(); |
|
29 | { |
46 | |
|
- | 47 | MouseKeyGlobalHook = Hook.GlobalEvents(); |
||
- | 48 | |
||
- | 49 | MQTTClient = new MQTTClient(this); |
||
- | 50 | MQTTServer = new MQTTServer(this); |
||
- | 51 | |
||
- | 52 | HelmBindings = new HelmBindings(); |
||
- | 53 | HelmBindings.Bindings = new List<HelmBinding>(); |
||
- | 54 | |
||
- | 55 | HelmBindingSource = new BindingSource(); |
||
- | 56 | HelmBindingSource.DataSource = HelmBindings.Bindings; |
||
- | 57 | |
||
- | 58 | HelmBindingsListBox.DisplayMember = "DisplayName"; |
||
30 | InitializeComponent(); |
59 | HelmBindingsListBox.ValueMember = "Keys"; |
|
Line 31... | Line 60... | |||
31 | |
60 | HelmBindingsListBox.DataSource = HelmBindingSource; |
|
32 | MQTTClient = new MQTTClient(this); |
61 | |
|
33 | MQTTServer = new MQTTServer(this); |
62 | WingBindings = new ConcurrentDictionary<string, HelmBindings>(); |
|
Line 222... | Line 251... | |||
222 | { |
251 | { |
|
223 | await MQTTClient.BroadcastLobbyMessage(LobbySayTextBox.Text); |
252 | await MQTTClient.BroadcastLobbyMessage(LobbySayTextBox.Text); |
|
224 | } |
253 | } |
|
Line 225... | Line 254... | |||
225 | |
254 | |
|
- | 255 | } |
||
- | 256 | |
||
- | 257 | private void HelmAddButtonClick(object sender, EventArgs e) |
||
- | 258 | { |
||
- | 259 | if (string.IsNullOrEmpty(HelmNameTextBox.Text)) |
||
- | 260 | { |
||
- | 261 | HelmNameTextBox.BackColor = Color.LightPink; |
||
- | 262 | return; |
||
- | 263 | } |
||
- | 264 | |
||
- | 265 | HelmAddButton.Enabled = false; |
||
- | 266 | |
||
- | 267 | MouseKeyCombo = new List<string>(); |
||
- | 268 | |
||
- | 269 | MouseKeyApplicationHook = Hook.AppEvents(); |
||
- | 270 | MouseKeyApplicationHook.MouseDown += MouseKeyHookOnMouseDown; |
||
- | 271 | MouseKeyApplicationHook.KeyUp += MouseKeyHookOnKeyUp; |
||
- | 272 | MouseKeyApplicationHook.KeyDown += MouseKeyHookOnKeyDown; |
||
- | 273 | MouseKeyApplicationHook.MouseUp += MouseKeyHookOnMouseUp; |
||
- | 274 | |
||
- | 275 | } |
||
- | 276 | |
||
- | 277 | private void MouseKeyHookOnKeyUp(object sender, KeyEventArgs e) |
||
- | 278 | { |
||
- | 279 | HelmBindings.Bindings.Add(new HelmBinding |
||
- | 280 | { |
||
- | 281 | Keys = MouseKeyCombo, |
||
- | 282 | Name = HelmNameTextBox.Text |
||
- | 283 | }); |
||
- | 284 | |
||
- | 285 | HelmBindingSource.ResetBindings(false); |
||
- | 286 | |
||
- | 287 | MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown; |
||
- | 288 | MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp; |
||
- | 289 | |
||
- | 290 | MouseKeyApplicationHook.Dispose(); |
||
- | 291 | |
||
- | 292 | HelmNameTextBox.Text = string.Empty; |
||
- | 293 | HelmAddButton.Enabled = true; |
||
- | 294 | } |
||
- | 295 | |
||
- | 296 | private void MouseKeyHookOnMouseUp(object sender, MouseEventArgs e) |
||
- | 297 | { |
||
- | 298 | HelmBindings.Bindings.Add(new HelmBinding |
||
- | 299 | { |
||
- | 300 | Keys = MouseKeyCombo, |
||
- | 301 | Name = HelmNameTextBox.Text |
||
- | 302 | }); |
||
- | 303 | |
||
- | 304 | HelmBindingSource.ResetBindings(false); |
||
- | 305 | |
||
- | 306 | MouseKeyApplicationHook.KeyDown -= MouseKeyHookOnKeyDown; |
||
- | 307 | MouseKeyApplicationHook.KeyUp -= MouseKeyHookOnKeyUp; |
||
- | 308 | |
||
- | 309 | MouseKeyApplicationHook.Dispose(); |
||
- | 310 | |
||
- | 311 | HelmNameTextBox.Text = string.Empty; |
||
- | 312 | HelmAddButton.Enabled = true; |
||
- | 313 | } |
||
- | 314 | |
||
- | 315 | |
||
- | 316 | private void MouseKeyHookOnMouseDown(object sender, MouseEventArgs e) |
||
- | 317 | { |
||
- | 318 | MouseKeyCombo.Add(MouseButtonToName(e.Button)); |
||
- | 319 | } |
||
- | 320 | |
||
- | 321 | private void MouseKeyHookOnKeyDown(object sender, KeyEventArgs e) |
||
- | 322 | { |
||
- | 323 | e.SuppressKeyPress = true; |
||
- | 324 | |
||
- | 325 | MouseKeyCombo.Add(KeyCodeToName((int) e.KeyCode)); |
||
- | 326 | } |
||
- | 327 | |
||
- | 328 | private void HelmNameTextBoxClick(object sender, EventArgs e) |
||
- | 329 | { |
||
- | 330 | HelmNameTextBox.BackColor = Color.Empty; |
||
- | 331 | } |
||
- | 332 | |
||
- | 333 | private string MouseButtonToName(MouseButtons button) |
||
- | 334 | { |
||
- | 335 | var mouseButton = string.Empty; |
||
- | 336 | switch (button) |
||
- | 337 | { |
||
- | 338 | case MouseButtons.Left: |
||
- | 339 | mouseButton = "Left Mouse Button"; |
||
- | 340 | break; |
||
- | 341 | case MouseButtons.Middle: |
||
- | 342 | mouseButton = "Middle Mouse Button"; |
||
- | 343 | break; |
||
- | 344 | case MouseButtons.Right: |
||
- | 345 | mouseButton = "Right Mouse Button"; |
||
- | 346 | break; |
||
- | 347 | } |
||
- | 348 | |
||
- | 349 | return mouseButton; |
||
- | 350 | } |
||
- | 351 | |
||
- | 352 | private string KeyCodeToName(int code) |
||
- | 353 | { |
||
- | 354 | var keyString = string.Empty; |
||
- | 355 | switch (code) |
||
- | 356 | { |
||
- | 357 | case 0: |
||
- | 358 | break; |
||
- | 359 | case 1: |
||
- | 360 | keyString = "Mouse Left"; |
||
- | 361 | break; |
||
- | 362 | case 2: |
||
- | 363 | keyString = "Mouse Right"; |
||
- | 364 | break; |
||
- | 365 | case 3: |
||
- | 366 | keyString = "Cancel"; |
||
- | 367 | break; |
||
- | 368 | case 4: |
||
- | 369 | keyString = "Mouse Middle"; |
||
- | 370 | break; |
||
- | 371 | case 5: |
||
- | 372 | keyString = "Special 1"; |
||
- | 373 | break; |
||
- | 374 | case 6: |
||
- | 375 | keyString = "Special 2"; |
||
- | 376 | break; |
||
- | 377 | case 8: |
||
- | 378 | keyString = "Back"; |
||
- | 379 | break; |
||
- | 380 | case 9: |
||
- | 381 | keyString = "TAB"; |
||
- | 382 | break; |
||
- | 383 | case 12: |
||
- | 384 | keyString = "Clear"; |
||
- | 385 | break; |
||
- | 386 | case 13: |
||
- | 387 | keyString = "Enter"; |
||
- | 388 | break; |
||
- | 389 | case 16: |
||
- | 390 | keyString = "Shift"; |
||
- | 391 | break; |
||
- | 392 | case 17: |
||
- | 393 | keyString = "Ctrl"; |
||
- | 394 | break; |
||
- | 395 | case 18: |
||
- | 396 | keyString = "Menu"; |
||
- | 397 | break; |
||
- | 398 | case 19: |
||
- | 399 | keyString = "Pause"; |
||
- | 400 | break; |
||
- | 401 | case 20: |
||
- | 402 | keyString = "Caps Lock"; |
||
- | 403 | break; |
||
- | 404 | case 21: |
||
- | 405 | keyString = "Kana/Hangul"; |
||
- | 406 | break; |
||
- | 407 | case 23: |
||
- | 408 | keyString = "Junja"; |
||
- | 409 | break; |
||
- | 410 | case 24: |
||
- | 411 | keyString = "Final"; |
||
- | 412 | break; |
||
- | 413 | case 25: |
||
- | 414 | keyString = "Hanja/Kanji"; |
||
- | 415 | break; |
||
- | 416 | case 27: |
||
- | 417 | keyString = "Esc"; |
||
- | 418 | break; |
||
- | 419 | case 28: |
||
- | 420 | keyString = "Convert"; |
||
- | 421 | break; |
||
- | 422 | case 29: |
||
- | 423 | keyString = "NonConvert"; |
||
- | 424 | break; |
||
- | 425 | case 30: |
||
- | 426 | keyString = "Accept"; |
||
- | 427 | break; |
||
- | 428 | case 31: |
||
- | 429 | keyString = "Mode"; |
||
- | 430 | break; |
||
- | 431 | case 32: |
||
- | 432 | keyString = "Space"; |
||
- | 433 | break; |
||
- | 434 | case 33: |
||
- | 435 | keyString = "Page Up"; |
||
- | 436 | break; |
||
- | 437 | case 34: |
||
- | 438 | keyString = "Page Down"; |
||
- | 439 | break; |
||
- | 440 | case 35: |
||
- | 441 | keyString = "End"; |
||
- | 442 | break; |
||
- | 443 | case 36: |
||
- | 444 | keyString = "Home"; |
||
- | 445 | break; |
||
- | 446 | case 37: |
||
- | 447 | keyString = "Left"; |
||
- | 448 | break; |
||
- | 449 | case 38: |
||
- | 450 | keyString = "Up"; |
||
- | 451 | break; |
||
- | 452 | case 39: |
||
- | 453 | keyString = "Right"; |
||
- | 454 | break; |
||
- | 455 | case 40: |
||
- | 456 | keyString = "Down"; |
||
- | 457 | break; |
||
- | 458 | case 41: |
||
- | 459 | keyString = "Select"; |
||
- | 460 | break; |
||
- | 461 | case 42: |
||
- | 462 | keyString = "Print"; |
||
- | 463 | break; |
||
- | 464 | case 43: |
||
- | 465 | keyString = "Execute"; |
||
- | 466 | break; |
||
- | 467 | case 44: |
||
- | 468 | keyString = "Snapshot"; |
||
- | 469 | break; |
||
- | 470 | case 45: |
||
- | 471 | keyString = "Insert"; |
||
- | 472 | break; |
||
- | 473 | case 46: |
||
- | 474 | keyString = "Delete"; |
||
- | 475 | break; |
||
- | 476 | case 47: |
||
- | 477 | keyString = "Help"; |
||
- | 478 | break; |
||
- | 479 | case 48: |
||
- | 480 | keyString = "Num 0"; |
||
- | 481 | break; |
||
- | 482 | case 49: |
||
- | 483 | keyString = "Num 1"; |
||
- | 484 | break; |
||
- | 485 | case 50: |
||
- | 486 | keyString = "Num 2"; |
||
- | 487 | break; |
||
- | 488 | case 51: |
||
- | 489 | keyString = "Num 3"; |
||
- | 490 | break; |
||
- | 491 | case 52: |
||
- | 492 | keyString = "Num 4"; |
||
- | 493 | break; |
||
- | 494 | case 53: |
||
- | 495 | keyString = "Num 5"; |
||
- | 496 | break; |
||
- | 497 | case 54: |
||
- | 498 | keyString = "Num 6"; |
||
- | 499 | break; |
||
- | 500 | case 55: |
||
- | 501 | keyString = "Num 7"; |
||
- | 502 | break; |
||
- | 503 | case 56: |
||
- | 504 | keyString = "Num 8"; |
||
- | 505 | break; |
||
- | 506 | case 57: |
||
- | 507 | keyString = "Num 9"; |
||
- | 508 | break; |
||
- | 509 | case 65: |
||
- | 510 | keyString = "A"; |
||
- | 511 | break; |
||
- | 512 | case 66: |
||
- | 513 | keyString = "B"; |
||
- | 514 | break; |
||
- | 515 | case 67: |
||
- | 516 | keyString = "C"; |
||
- | 517 | break; |
||
- | 518 | case 68: |
||
- | 519 | keyString = "D"; |
||
- | 520 | break; |
||
- | 521 | case 69: |
||
- | 522 | keyString = "E"; |
||
- | 523 | break; |
||
- | 524 | case 70: |
||
- | 525 | keyString = "F"; |
||
- | 526 | break; |
||
- | 527 | case 71: |
||
- | 528 | keyString = "G"; |
||
- | 529 | break; |
||
- | 530 | case 72: |
||
- | 531 | keyString = "H"; |
||
- | 532 | break; |
||
- | 533 | case 73: |
||
- | 534 | keyString = "I"; |
||
- | 535 | break; |
||
- | 536 | case 74: |
||
- | 537 | keyString = "J"; |
||
- | 538 | break; |
||
- | 539 | case 75: |
||
- | 540 | keyString = "K"; |
||
- | 541 | break; |
||
- | 542 | case 76: |
||
- | 543 | keyString = "L"; |
||
- | 544 | break; |
||
- | 545 | case 77: |
||
- | 546 | keyString = "M"; |
||
- | 547 | break; |
||
- | 548 | case 78: |
||
- | 549 | keyString = "N"; |
||
- | 550 | break; |
||
- | 551 | case 79: |
||
- | 552 | keyString = "O"; |
||
- | 553 | break; |
||
- | 554 | case 80: |
||
- | 555 | keyString = "P"; |
||
- | 556 | break; |
||
- | 557 | case 81: |
||
- | 558 | keyString = "Q"; |
||
- | 559 | break; |
||
- | 560 | case 82: |
||
- | 561 | keyString = "R"; |
||
- | 562 | break; |
||
- | 563 | case 83: |
||
- | 564 | keyString = "S"; |
||
- | 565 | break; |
||
- | 566 | case 84: |
||
- | 567 | keyString = "T"; |
||
- | 568 | break; |
||
- | 569 | case 85: |
||
- | 570 | keyString = "U"; |
||
- | 571 | break; |
||
- | 572 | case 86: |
||
- | 573 | keyString = "V"; |
||
- | 574 | break; |
||
- | 575 | case 87: |
||
- | 576 | keyString = "W"; |
||
- | 577 | break; |
||
- | 578 | case 88: |
||
- | 579 | keyString = "X"; |
||
- | 580 | break; |
||
- | 581 | case 89: |
||
- | 582 | keyString = "Y"; |
||
- | 583 | break; |
||
- | 584 | case 90: |
||
- | 585 | keyString = "Z"; |
||
- | 586 | break; |
||
- | 587 | case 91: |
||
- | 588 | keyString = "Windows Left"; |
||
- | 589 | break; |
||
- | 590 | case 92: |
||
- | 591 | keyString = "Windows Right"; |
||
- | 592 | break; |
||
- | 593 | case 93: |
||
- | 594 | keyString = "Application"; |
||
- | 595 | break; |
||
- | 596 | case 95: |
||
- | 597 | keyString = "Sleep"; |
||
- | 598 | break; |
||
- | 599 | case 96: |
||
- | 600 | keyString = "NumPad 0"; |
||
- | 601 | break; |
||
- | 602 | case 97: |
||
- | 603 | keyString = "NumPad 1"; |
||
- | 604 | break; |
||
- | 605 | case 98: |
||
- | 606 | keyString = "NumPad 2"; |
||
- | 607 | break; |
||
- | 608 | case 99: |
||
- | 609 | keyString = "NumPad 3"; |
||
- | 610 | break; |
||
- | 611 | case 100: |
||
- | 612 | keyString = "NumPad 4"; |
||
- | 613 | break; |
||
- | 614 | case 101: |
||
- | 615 | keyString = "NumPad 5"; |
||
- | 616 | break; |
||
- | 617 | case 102: |
||
- | 618 | keyString = "NumPad 6"; |
||
- | 619 | break; |
||
- | 620 | case 103: |
||
- | 621 | keyString = "NumPad 7"; |
||
- | 622 | break; |
||
- | 623 | case 104: |
||
- | 624 | keyString = "NumPad 8"; |
||
- | 625 | break; |
||
- | 626 | case 105: |
||
- | 627 | keyString = "NumPad 9"; |
||
- | 628 | break; |
||
- | 629 | case 106: |
||
- | 630 | keyString = "NumPad *"; |
||
- | 631 | break; |
||
- | 632 | case 107: |
||
- | 633 | keyString = "NumPad +"; |
||
- | 634 | break; |
||
- | 635 | case 108: |
||
- | 636 | keyString = "NumPad ."; |
||
- | 637 | break; |
||
- | 638 | case 109: |
||
- | 639 | keyString = "NumPad -"; |
||
- | 640 | break; |
||
- | 641 | case 110: |
||
- | 642 | keyString = "NumPad ,"; |
||
- | 643 | break; |
||
- | 644 | case 111: |
||
- | 645 | keyString = "NumPad /"; |
||
- | 646 | break; |
||
- | 647 | case 112: |
||
- | 648 | keyString = "F1"; |
||
- | 649 | break; |
||
- | 650 | case 113: |
||
- | 651 | keyString = "F2"; |
||
- | 652 | break; |
||
- | 653 | case 114: |
||
- | 654 | keyString = "F3"; |
||
- | 655 | break; |
||
- | 656 | case 115: |
||
- | 657 | keyString = "F4"; |
||
- | 658 | break; |
||
- | 659 | case 116: |
||
- | 660 | keyString = "F5"; |
||
- | 661 | break; |
||
- | 662 | case 117: |
||
- | 663 | keyString = "F6"; |
||
- | 664 | break; |
||
- | 665 | case 118: |
||
- | 666 | keyString = "F7"; |
||
- | 667 | break; |
||
- | 668 | case 119: |
||
- | 669 | keyString = "F8"; |
||
- | 670 | break; |
||
- | 671 | case 120: |
||
- | 672 | keyString = "F9"; |
||
- | 673 | break; |
||
- | 674 | case 121: |
||
- | 675 | keyString = "F10"; |
||
- | 676 | break; |
||
- | 677 | case 122: |
||
- | 678 | keyString = "F11"; |
||
- | 679 | break; |
||
- | 680 | case 123: |
||
- | 681 | keyString = "F12"; |
||
- | 682 | break; |
||
- | 683 | case 124: |
||
- | 684 | keyString = "F13"; |
||
- | 685 | break; |
||
- | 686 | case 125: |
||
- | 687 | keyString = "F14"; |
||
- | 688 | break; |
||
- | 689 | case 126: |
||
- | 690 | keyString = "F15"; |
||
- | 691 | break; |
||
- | 692 | case 127: |
||
- | 693 | keyString = "F16"; |
||
- | 694 | break; |
||
- | 695 | case 128: |
||
- | 696 | keyString = "F17"; |
||
- | 697 | break; |
||
- | 698 | case 129: |
||
- | 699 | keyString = "F18"; |
||
- | 700 | break; |
||
- | 701 | case 130: |
||
- | 702 | keyString = "F19"; |
||
- | 703 | break; |
||
- | 704 | case 131: |
||
- | 705 | keyString = "F20"; |
||
- | 706 | break; |
||
- | 707 | case 132: |
||
- | 708 | keyString = "F21"; |
||
- | 709 | break; |
||
- | 710 | case 133: |
||
- | 711 | keyString = "F22"; |
||
- | 712 | break; |
||
- | 713 | case 134: |
||
- | 714 | keyString = "F23"; |
||
- | 715 | break; |
||
- | 716 | case 135: |
||
- | 717 | keyString = "F24"; |
||
- | 718 | break; |
||
- | 719 | case 144: |
||
- | 720 | keyString = "Num lock"; |
||
- | 721 | break; |
||
- | 722 | case 145: |
||
- | 723 | keyString = "Scroll"; |
||
- | 724 | break; |
||
- | 725 | case 160: |
||
- | 726 | keyString = "Shift Left"; |
||
- | 727 | break; |
||
- | 728 | case 161: |
||
- | 729 | keyString = "Shift Right"; |
||
- | 730 | break; |
||
- | 731 | case 162: |
||
- | 732 | keyString = "Ctrl Left"; |
||
- | 733 | break; |
||
- | 734 | case 163: |
||
- | 735 | keyString = "Ctrl Right"; |
||
- | 736 | break; |
||
- | 737 | case 164: |
||
- | 738 | keyString = "Menu Left"; |
||
- | 739 | break; |
||
- | 740 | case 165: |
||
- | 741 | keyString = "Menu Right"; |
||
- | 742 | break; |
||
- | 743 | default: |
||
- | 744 | break; |
||
- | 745 | } |
||
- | 746 | |
||
- | 747 | return keyString; |
||
- | 748 | } |
||
- | 749 | |
||
- | 750 | private void HelmRemoveButtonClick(object sender, EventArgs e) |
||
- | 751 | { |
||
- | 752 | var helmBinding = (HelmBinding)HelmBindingsListBox.SelectedItem; |
||
- | 753 | if (helmBinding == null) |
||
- | 754 | return; |
||
- | 755 | |
||
- | 756 | HelmBindings.Bindings.Remove(helmBinding); |
||
- | 757 | HelmBindingSource.ResetBindings(false); |
||
226 | } |
758 | } |
|
227 | } |
759 | } |