Advertisement
Guest User

Untitled

a guest
May 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.99 KB | None | 0 0
  1. <style>
  2. body,
  3. html {
  4. margin: 0;
  5. }
  6.  
  7. #can,
  8. #can2 {
  9. display: block;
  10. }
  11.  
  12. .canvas-container {
  13. width: 100%;
  14. height: 80%;
  15. }
  16.  
  17. .buttons-container {
  18. width: 100%;
  19. height: 20%;
  20. background-color: rgb(29, 28, 28);
  21. padding: 10px;
  22. box-sizing: border-box;
  23. }
  24. .bad-packet {
  25. width: 100%;
  26. background-color: #ff9494;
  27. }
  28. .good-packet {
  29. width: 100%;
  30. background-color: #4bb543;
  31. }
  32. #console {
  33. width: 100%;
  34. height: 80%;
  35. overflow: auto;
  36. padding-top: 5px;
  37. box-sizing: border-box;
  38. }
  39.  
  40. button {
  41. cursor: pointer;
  42. border: 1px solid #d7dada;
  43. -moz-border-radius: 3px;
  44. -webkit-border-radius: 3px;
  45. border-radius: 3px;
  46. font-size: 12px;
  47. font-family: courier new, courier, monospace;
  48. padding: 6px;
  49. text-decoration: none;
  50. display: inline-block;
  51. text-shadow: 0px 0px 0 rgba(0, 0, 0, 0.3);
  52. font-weight: bold;
  53. color: #000000;
  54. background-color: #f4f5f5;
  55. background-image: -webkit-gradient(
  56. linear,
  57. left top,
  58. left bottom,
  59. from(#f4f5f5),
  60. to(#dfdddd)
  61. );
  62. background-image: -webkit-linear-gradient(top, #f4f5f5, #dfdddd);
  63. background-image: -moz-linear-gradient(top, #f4f5f5, #dfdddd);
  64. background-image: -ms-linear-gradient(top, #f4f5f5, #dfdddd);
  65. background-image: -o-linear-gradient(top, #f4f5f5, #dfdddd);
  66. background-image: linear-gradient(to bottom, #f4f5f5, #dfdddd);
  67. filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#f4f5f5, endColorstr=#dfdddd);
  68. }
  69.  
  70. button:hover {
  71. border: 1px solid #bfc4c4;
  72. background-color: #d9dddd;
  73. background-image: -webkit-gradient(
  74. linear,
  75. left top,
  76. left bottom,
  77. from(#d9dddd),
  78. to(#c6c3c3)
  79. );
  80. background-image: -webkit-linear-gradient(top, #d9dddd, #c6c3c3);
  81. background-image: -moz-linear-gradient(top, #d9dddd, #c6c3c3);
  82. background-image: -ms-linear-gradient(top, #d9dddd, #c6c3c3);
  83. background-image: -o-linear-gradient(top, #d9dddd, #c6c3c3);
  84. background-image: linear-gradient(to bottom, #d9dddd, #c6c3c3);
  85. filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#d9dddd, endColorstr=#c6c3c3);
  86. }
  87. </style>
  88. <html>
  89. <head>
  90. <title>Bittorent</title>
  91. </head>
  92. <body>
  93. <div class="canvas-container">
  94. <canvas id="can"> </canvas>
  95. <canvas id="can2"> </canvas>
  96. </div>
  97. <div class="buttons-container">
  98. <button type="button" onclick="computerPlace()" id="placePc">
  99. Postaw komputer
  100. </button>
  101. <button type="button" onclick="turnOn()">Włacz komputer</button>
  102. <button type="button" onclick="turnOff()">Wyłacz komputer</button>
  103. <button type="button" onclick="corruptPacket()">
  104. Zepsuj losowy pakiet
  105. </button>
  106. <button type="button" onclick="fixPackets()">Napraw pakiety</button>
  107. <div id="console"></div>
  108. </div>
  109. </body>
  110. </html>
  111.  
  112. <script>
  113. /** VARIABLES **/
  114.  
  115. const canvasElem = document.getElementById("can");
  116. const ctx = canvasElem.getContext("2d");
  117.  
  118. const canvasElem2 = document.getElementById("can2");
  119. const ctx2 = canvasElem2.getContext("2d");
  120.  
  121. let placingPc = false;
  122.  
  123. let selectedPc = 0;
  124. let pcs = [
  125. {
  126. name: "Komputer Główny",
  127. x: 25,
  128. y: 25,
  129. file: [],
  130. active: true,
  131. finished: true,
  132. history: ""
  133. }
  134. ];
  135.  
  136. /** BUTTONS **/
  137.  
  138. function corruptPacket() {
  139. pcs[selectedPc].file[Math.floor(Math.random() * 100)] = -1;
  140. redraw();
  141. }
  142.  
  143. function fixPackets() {
  144. for (i = 0; i < 100; i++) {
  145. if (pcs[selectedPc].file[i] == -1) pcs[selectedPc].file[i] = 1;
  146. }
  147. redraw();
  148. }
  149.  
  150. function turnOn() {
  151. pcs[selectedPc].active = true;
  152. redraw();
  153. }
  154.  
  155. function turnOff() {
  156. pcs[selectedPc].active = false;
  157. redraw();
  158. }
  159.  
  160. function computerPlace() {
  161. placingPc = true;
  162. document.getElementById("placePc").innerHTML = "Kładziesz komputer...";
  163. }
  164.  
  165. /** MOUSE CLICK **/
  166.  
  167. document.addEventListener("click", onMouseClick, false);
  168.  
  169. function onMouseClick(e) {
  170. if (placingPc) {
  171. if (
  172. e.clientX > 0 &&
  173. e.clientX <= canvasElem.width &&
  174. e.clientY > 0 &&
  175. e.clientY <= canvasElem.height
  176. ) {
  177. placingPc = false;
  178. pcs.push({
  179. name: "PC " + pcs.length,
  180. x: e.clientX,
  181. y: e.clientY,
  182. file: [],
  183. active: false,
  184. finished: false,
  185. history: ""
  186. });
  187.  
  188. for (i = 0; i < 100; i++) {
  189. pcs[pcs.length - 1].file[i] = 0;
  190. }
  191. document.getElementById("placePc").innerHTML = "Postaw komputer";
  192. redraw();
  193. }
  194. } else {
  195. pcs.forEach((element, index) => {
  196. if (
  197. e.clientX > element.x &&
  198. e.clientX < element.x + 25 &&
  199. e.clientY > element.y &&
  200. e.clientY < element.y + 25
  201. ) {
  202. selectedPc = index;
  203. redraw();
  204. }
  205. });
  206. }
  207. }
  208.  
  209. /** SOME INIT **/
  210. //First PC must have 100% of the file + be active
  211. for (i = 0; i < 100; i++) {
  212. pcs[0].file[i] = 1;
  213. }
  214.  
  215. var myVar = setInterval(myTimer, 500);
  216. redraw();
  217.  
  218. /** DRAWING EVERYTHING **/
  219. function redraw() {
  220. ctx.clearRect(0, 0, canvasElem.width, canvasElem.height);
  221. pcs.forEach((element, index) => {
  222. pcs.forEach((element2, index2) => {
  223. if (element != element2 && index2 > index) {
  224. if (!element.active || !element2.active) ctx.strokeStyle = "#FF0000";
  225. else ctx.strokeStyle = "#00FF00";
  226.  
  227. ctx.beginPath();
  228. ctx.moveTo(element.x + 12, element.y + 12);
  229. ctx.lineTo(element2.x + 12, element2.y + 12);
  230. ctx.stroke();
  231. }
  232. });
  233.  
  234. ctx.beginPath();
  235. ctx.lineWidth = "2";
  236. ctx.strokeStyle = "#000000";
  237. ctx.rect(element.x, element.y, 30, 30);
  238. ctx.stroke();
  239. ctx.fillStyle = "#FFFFFF";
  240. ctx.fillRect(element.x, element.y, 30, 30);
  241.  
  242. if (element.active) ctx.fillStyle = "#00FF00";
  243. else ctx.fillStyle = "#FF0000";
  244.  
  245. ctx.fillRect(element.x + 2.5, element.y + 2.5, 25, 25);
  246. if (element.finished) ctx.strokeStyle = "#00FF00";
  247. else ctx.strokeStyle = "#000000";
  248. ctx.lineWidth = "1";
  249. ctx.strokeText(element.name, element.x, element.y - 10);
  250. });
  251.  
  252. ctx2.clearRect(0, 0, canvasElem2.width, canvasElem2.height);
  253. ctx2.strokeStyle = "#000000";
  254. ctx2.strokeText("Wybrany pc: " + selectedPc, 0, 15);
  255. var tempY = 0;
  256. var tempX = 0;
  257. pcs[selectedPc].file.forEach((element, index) => {
  258. if (element == -1) ctx2.fillStyle = "#FF0000";
  259. else if (element == 0) ctx2.fillStyle = "#AAAAAA";
  260. else if (element == 1) ctx2.fillStyle = "#00FF00";
  261.  
  262. ctx2.fillRect(25 * tempX, 25 * tempY + 20, 20, 20);
  263. tempX++;
  264. if (25 * tempX + 20 > window.innerWidth) {
  265. tempY++;
  266. tempX = 0;
  267. }
  268. });
  269.  
  270. document.getElementById("console").innerHTML = pcs[selectedPc].history;
  271. }
  272.  
  273. /** LOGIC TIMER **/
  274. function myTimer() {
  275. pcs.forEach(element => {
  276. if (element.active && !element.finished) {
  277. pcs.forEach(element2 => {
  278. if (element2.active && element != element2) {
  279. var foundFile = false;
  280. for (i = 0; i < 100; i++) {
  281. if (element.file[i] == 0 && element2.file[i] != 0 && !foundFile) {
  282. element.file[i] = element2.file[i];
  283. if (element.file[i] == 1) {
  284. element.history =
  285. "<div class='good-packet'>" +
  286. "Odebrałem pakiet: " +
  287. i +
  288. " od komputer: " +
  289. element2.name +
  290. ". Wartość pakietu: " +
  291. element.file[i] +
  292. "<span/></br>" +
  293. element.history;
  294. } else {
  295. element.history =
  296. "<div class='bad-packet'>" +
  297. " Odebrałem pakiet: " +
  298. i +
  299. " od komputer: " +
  300. element2.name +
  301. ". Wartość pakietu: " +
  302. element.file[i] +
  303. "<span/></br>" +
  304. element.history;
  305. }
  306. foundFile = true;
  307. if (i == 99) element.finished = true;
  308. }
  309. }
  310. }
  311. });
  312. }
  313. });
  314.  
  315. redraw();
  316. }
  317.  
  318. /** RESIZING **/
  319. window.addEventListener("resize", resizeCanvas, false);
  320.  
  321. function resizeCanvas() {
  322. canvasElem.width = window.innerWidth;
  323. canvasElem.height =
  324. window.innerHeight -
  325. 0.2 * window.innerHeight -
  326. (30 + (100 / (window.innerWidth / 25)) * 25);
  327. canvasElem2.width = window.innerWidth;
  328. canvasElem2.height = 30 + (100 / (window.innerWidth / 25)) * 25;
  329. redraw();
  330. }
  331. resizeCanvas();
  332. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement