fork download
  1. WEBAPI.on(CHAT_EVENT,process_chat(message)) // При сообщении в чате вызывается
  2. // функция обработки сообщений
  3.  
  4. var Queue = new Array();
  5.  
  6. function eventloop() { // как бы эвент луп
  7. l = Queue.length // если в очереди что-то есть
  8. if (l>0) {
  9. for (i=0;i<=l;i++){ // то выполняет все функции,
  10. Queue.pop(i)() // удаляя из массива.
  11. // ПОДОЖДАТЬ, ПОКА ВЫПОЛНИТСЯ, И ТОЛЬКО ЗАТЕМ
  12. // ПЕРЕХОДИТ К СЛЕДУЮЩЕЙ ИТЕРАЦИИ!
  13. }
  14. }
  15. setTimeout(eventloop,100) // вызывается заново, чтобы луп.
  16. }
  17.  
  18. function process_chat(message){ // тут довольно очевидно
  19. if (message == "a"){
  20. Queue.push(chat1)
  21. }
  22. if (message == "b"){
  23. Queue.push(chat2)
  24. }
  25. }
  26.  
  27. function chat1(){
  28. ACTION1 // Делается какое-то действие
  29. WAIT 250 // Затем нужно немного подождать, иначе действие 2
  30. ACTION2 // сайтом обработано не будет (или будет обработано неправильно)
  31. WAIT 250
  32. ACTION3
  33. /*
  34. Например:
  35. 1. переименовать пользователя в govnyashka;
  36. 2. Замутить пользователя с ником govnyashka;
  37. 3. Переименовать пользователя из govnyashak обратно в тот, который был.
  38. Если это будет выполняться со скоростью рантайма, то мута не произойдёт, так как
  39. на момент выполнения команды ACTION2 сайт, по всей видимости,
  40. ещё не в курсе, что кто-то был переименовать, в итоге мутить некого. Если подождать
  41. сотню-две мс, то всё нормально.
  42. */
  43. }
  44.  
  45. // ! Так как нет wait(), sleep(), delay(), пока что имплементировано это через setTimeout вот так:
  46. function chat1(){
  47. ACTION1
  48. setTimeout(ACTION2,250) // 250
  49. setTImeout(ACTION3,500) // плюс ещё 250
  50. }
  51. /*
  52. Разумеется, если chat1() будет вызвано прямиком из process_chat, то ACTION'ы будут
  53. друг на друга наслаиваться (таймер action2 от второго вызова закончится раньше, чем
  54. таймер action3 первого вызова, если так быстро будут присланы два сообщения.
  55. что в случае пользователей >1 вполне возможно.) А мне бы этого не хотелось,
  56. так как что-нибудь, да сломается от такого поведения.
  57. Так как setTimeout добавляет фукнцию в стек уже после истечения таймера, у меня нет
  58. никакой возможности узнать, когда функция выполнилась.
  59. */
  60.  
  61. function chat2(){
  62. ACTION1 // какая-то другая подобная функция
  63. }
Runtime error #stdin #stdout #stderr 0.01s 4980KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
prog.js:29: SyntaxError: missing ; before statement:
prog.js:29: 	WAIT 250		// Затем нужно немного подождать, иначе действие 2
prog.js:29: .............^