Перейти к содержимому
  • 0
Oleshe

Как сделать так чтобы запустить 2 повтора while одно временно без ошибки, чтобы в 1-м было io.read(), а во 2-м event.pull?

Вопрос

Я сижу и надумал сделать себе что то типа смс, но, когда запускаю сравнение с even.pull даже с задержкой 2, оно не даёт пользывателю написать сообщение, выглядит это примерно так: запрашиваем от сервера свободный порт, получает его и сравнивает цифра, ставит отметку на тот порт который ему прислал сервер, открывает его, после ждёт сообщения(even.pull) и ждёт сообщения для отправки(io.read) если сообщение отправлено то оно посылает порт для получателя и само сообщение, сервер отправляет сообщение по порту на планшет (или ПК) но указанный порт, если мы введём exit то мы отправим что ранее записанный порт программой свободен сервер отметит, и мы закрываем порт, если сообщение приходит, то мы выводим его на экран.2021-10-13_14_35_06.thumb.png.2ed31a74321e8526b68abc37237f8b53.png

Также может прислать просто пустое сообщение.

извините что так много но я очь много времени потратил ;-;

event = require('event')
cmp = require('component')
os = require('os')
modem = cmp.modem
print('удачность соединения:')
print(modem.open(1))
two = false
thre = false
four = false
five = false
beep = cmp.computer.beep()
function prog()
  while boo == false do
    _, _, _, _, _, sus = event.pull("modem_message")
    print(sus)
    if sus == 'sms_chek' then
      if two == false then
        modem.broadcast(16, '2')
        print('послано 2')
        two = true
      else
        os.sleep(0.5)
        if thre == false then
          modem.broadcast(16, '3')
          print('послано 3')
          thre = true
        else
          os.sleep(0.5)
          if four == false then
            modem.broadcast(16, '4')
            print('послано 4')
            four = true
          else
            os.sleep(0.5)
            if five == false then
              modem.broadcast(16, '5')
              print('послано 5')
              five = true
            else
              print('ОШИБКА, НЕТ МЕСТ <SMS>')
            end
          end
        end
      end
    end
    if sus == 'sms_exit' then
      _, _, _, _, _, oi = event.pull("modem_message")
      if oi == '2' then
        two = false
      else if oi == '3' then
        thre = fasle
       end
      end
    if oi == '4' then
      four = false
    else if oi == '5' then
      five = false
    end
    end
    end
    if sus == 'sms_messege' then
      _, _, _, _, _, s = event.pull("modem_message")
      os.sleep(1)
      _, _, _, _, _, sms = event.pull("modem_message")
      if s == '' then
        print('чуть не произошла ошибка')
      else
      print('oправленно: ' .. sms .. '  ' .. 'на порт: ' .. s)
      portsms = tonumber(s)
      smska = sms
      modem.broadcast(portsms, 'SMS')
      os.sleep(1)
      modem.broadcast(portsms, sms)
      end
    end
  end
end
boo = false
function shell ()
  while exit == false do
    as = io.read()
    if as == 'exit' then exit = true
  end
    end
end
shell()
prog()

ето код сервера

реально много получается

код: планшета:

local cmp = require('component')
local modem = cmp.modem
local event = require('event')
local exit = false
print(modem.open(16))
local a = 0
modem.open(16)
sms = ''
while sms == '' do
  modem.broadcast(1, 'sms_chek')
  print('попытка соединения с сервером')
  _, _, _, _, _, sms = event.pull("modem_message")
  if sms == '2' then
   modem.close(16)
   modem.open(2)
   port = '2'
   print('порт: 2')
    print(modem.open(2))
  else if sms == '3' then
    modem.close(16)
    modem.open(3)
    port = '3'
    print('порт: 3')
    print(modem.open(3))
  else if sms == '4' then
    modem.close(16)
    modem.open(4)
    port = '4'
    print('порт: 4')
    print(modem.open(4))
  else if sms == '5' then
    modem.close(16)
    modem.open(5)
    port = '5'
    print('порт: 5')
    print(modem.open(5))
  end
end
end
end
end
smsRAM = false
RAM = ''
function send ()
  while exit == false do
    _, _, _, _, _, sms = event.pull(2, "modem_message")
    if sms == '' then
      
    else if sms == 'SMS' then
      print('получен смс:')
      _, _, _, _, _, sms = event.pull(2, "modem_message")
      RAM = sms
      smsRAM = true
      print(sms)
    end
    end
    local sa = io.read()
    if sa == 'exit' then
       exit = true
       modem.broadcast(1, 'sms_exit')
       modem.broadcast(1, port)
       
       cmp.computer.beep()
    else
      modem.broadcast(1, 'sms_messege')
      os.sleep(1)
      modem.broadcast(1, sa)
      local sa =io.read()
      modem.broadcast(1, sa)
      print('отправлено')
    end
    if sa == '' then
      if smsRAM == true then
        print(RAM)
        smsRAM = false
      end
    end
  end
end
send()

еше раз извините что много, прост хочется решить проблему

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

io.read занимает поток исполнения тем что ожиданиет событие и нажатие Enter, в твоём случае тебе нужно отдельно обрабатывать событие key_down и modem_message - тогда появится видимость многопоточности или использовать библиотеку thread. Да, код в тег обернуть бы, а лучше на пастбин аплоднуть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...