tcp.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. function LuaLogicTCP::sendData(%this)
  2. {
  3. cancel(%this.lualogicTick);
  4. %this.lualogicTick = %this.schedule(1, "sendData");
  5. if(%this.data !$= "")
  6. {
  7. %data = %this.data;
  8. while(strpos(%data, ";;") != -1)
  9. %data = strReplace(%data, ";;", "; ;");
  10. %this.send(%data @ "\n");
  11. %this.data = "";
  12. }
  13. }
  14. function LuaLogicTCP::onConnected(%this)
  15. {
  16. lualogic_print("tcp connected");
  17. %this.data = "";
  18. %this.sendData();
  19. %this.isConnected = true;
  20. lualogic_sendoptions();
  21. lualogic_sendgatedefinitions();
  22. lualogic_sendall();
  23. }
  24. function LuaLogicTCP::onLine(%this, %line)
  25. {
  26. %cmd = getField(%line, 0);
  27. switch$(%cmd)
  28. {
  29. case "WU":
  30. %state = getField(%line, 1)|0;
  31. %count = getFieldCount(%line);
  32. if(%state)
  33. {
  34. for(%i = 2; %i < %count; %i++)
  35. {
  36. %brick = getField(%line, %i);
  37. if(isObject(%brick))
  38. %brick.setColorFX(3, true);
  39. }
  40. }
  41. else
  42. {
  43. for(%i = 2; %i < %count; %i++)
  44. {
  45. %brick = getField(%line, %i);
  46. if(isObject(%brick))
  47. %brick.setColorFX(0, true);
  48. }
  49. }
  50. case "TPS":
  51. %tz = getField(%line, 1);
  52. %count = ClientGroup.getCount();
  53. for(%i = 0; %i < %count; %i++)
  54. {
  55. %client = ClientGroup.getObject(%i);
  56. if(%client.logicLTR)
  57. commandToClient(%client, 'bottomPrint', "\c3Logic Tick Rate\c6: " @ %tz, 2, 1);
  58. }
  59. case "GINFO":
  60. %client = getField(%line, 1);
  61. if(isObject(%client))
  62. {
  63. %info = getField(%line, 2);
  64. %info = lualogic_collapseescape(%info);
  65. %info = strReplace(%info, "\\c0", "\c0");
  66. %info = strReplace(%info, "\\c2", "\c2");
  67. %info = strReplace(%info, "\\c5", "\c5");
  68. %client.centerPrint(%info, 5);
  69. }
  70. case "SINFO":
  71. if(isObject(%client = getField(%line, 1)))
  72. {
  73. %wires = getField(%line, 2);
  74. %gates = getField(%line, 3);
  75. %inports = getField(%line, 4);
  76. %outports = getField(%line, 5);
  77. messageClient(%client, '', '\c3Wires\c6: %1', %wires);
  78. messageClient(%client, '', '\c3Gates\c6: %1', %gates);
  79. messageClient(%client, '', '\c3Ports\c6: %1 inputs | %2 outputs (%3 total)', %inports, %outports, %inports + %outports);
  80. }
  81. case "CB":
  82. %data = getFields(%line, 1, getFieldCount(%line));
  83. %data = nextToken(%data, brick, "\t");
  84. while(%brick !$= ""){
  85. %data = nextToken(%data, argc, "\t");
  86. for(%i=0; %i<%argc; %i++){
  87. %data = nextToken(%data, av, "\t");
  88. %argv[%i] = lualogic_collapseescape(%av);
  89. }
  90. if(isObject(%brick)){
  91. %brick.getDatablock().LuaLogic_Callback(%brick, %argv0, %argv1, %argv2, %argv3, %argv4, %argv5, %argv6, %argv7, %argv8, %argv9);
  92. }
  93. %data = nextToken(%data, brick, "\t");
  94. }
  95. case "TEST":
  96. talk("Time: " @ getField(%line, 1));
  97. }
  98. }
  99. function LuaLogicTCP::onConnectFailed(%this)
  100. {
  101. lualogic_print("tcp failed to connect");
  102. }
  103. function LuaLogicTCP::onDisconnect(%this)
  104. {
  105. lualogic_print("tcp disconnected");
  106. %this.isConnected = false;
  107. cancel(%this.lualogicTick);
  108. }