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


Фотография

Android & OpenComputers

android opencomputers

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 46

#1 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 07 Декабрь 2014 - 21:04

*
Популярное сообщение!

Скачать приложение android

Библиотека клиента ОС

 

 

На нашем форуме уже не мало программ, есть программы для защиты дома, программы для контроля. карьеры на черепахах и роботах. Однако у всех одна и та же проблема - требуется быть в игре для того, чтобы контролировать их работу или запускать что либо. Запускать игру дело не быстрое, ведь нужен компьютер, а он не у всех под рукой. Другое дело - мобильный телефон или планшет. Почти всегда рядом, компактный, легко носить. Это уже так вплелось в нашу жизнь, что мы и не замечаем ничего сверх естественного в этом.

Возвращаясь к вопросу об управлении своими компьютерными системами не заходя в игру. Я решил сделать андроид приложение для этих целей. Все очень просто - запустил приложение - получил данные от своих компьютеров и дал им новые задания не заходя в игру. Так это должно быть в идеале.

Для соединения требуется лишь запустить программу-клиент на OC компьютере и запустить андроид приложение. Для соединения андроида и игрового компьютера используется некий "ключ", который требуется ввести в оба клиента.

 

Для примера используем ключ "abc789"

Соединяться будем с нашим собственным сервером моста(Выложу его потом в общий доступ)

dc4a129ab373t.jpg

После нажатия на Готово или кнопку Connect ниже поля ввода ключа - произойдет попытка соединиться на указанный сервер с заданным ключом. Если соединение успешно - нас перебросит в окно консоли, между окнами можно переключаться путем свайпов или перелистывания справа налево или наоборот.

af66a3e66425t.jpg

Окно консоли показывает то, что вы принимаете из сети, чуть ниже поле ввода для ввода текста

 

Перелистываем обратно в окно авторизации и видим, что индикатор показывает то, что мы подсоединены к мосту(подробнее об этом можно узнать изучая статью по клиентской части ОС. Ссылка выше.)

7242769021dbt.jpg

Попробуем для теста написать что либо и отправить

a4f76ab0b2b4t.jpg
ОС клиент не подключен к сети моста, поэтому мост уведомляет нас о том, что пересылать отправленное нами сообщение некому.

Подключаем наш игровой компьютер с интернет платой к мосту ()

Android приложение получило уведомление о том, что ОС клиент подключен и можно обмениваться данными в виде строк(string)

e0e6f9441231t.jpg
 

Отправим несколько тестовых строк, в том числе и команды среди них. Затем отключим для демонстрации программу ОС и запустим её снова. Связь восстанавливается, уведомления об этом получаются корректно

dff00a840dcct.jpg
 

 

Вот так выглядит тестовая программка, которая обрабатывает команды set N.

ok означает, что команда set N распознана успешно, true - это успешно ли было отослано слово "pong"(true означает, что до моста дошло успешно).

ad37729498d4t.jpg

6558f3618edet.jpg

 

 

 

Обновление 1:

Добавлена кнопка Disconnect&Close  - отключает соединение и закрывает фоновый сервис.

Добавлен визуальный индикатор состояния подключения(Шкала прогресса ProgressBar и текст), который показывает как на данный момент работает система.

Добавлено автоматическое переключение в окно консоли при подключении

Исправлен баг в поле ввода ключа. Кнопка Done выглядела не корректно.

 

Обновление 2:

Добавлена автоматическая прокрутка в логах консоли

Изменен алгоритм обработки сообщений и системных кодов, так что старые версии приложения и ОС части не работают с обновленным мостом, обновляйте библиотеку и приложение.

Немного увеличено потребление оперативной памяти в угоду отмены некоторых ограничений.

Уменьшен сетевой DATA трафик в режиме ожидания на 28,67%

 

Обновление 3:

Добавлена возможность получать Toast и Push нотификации по команде с ОС

Исправлена синтаксическая ошибка, которая приводила к невозможности установить приложение на устройство.



#2 Оффлайн   GravityFolls

GravityFolls
  • Пользователи
  • Сообщений: 95
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 07 Декабрь 2014 - 21:11

Как нибудь попробую запустить.



#3 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 07 Декабрь 2014 - 23:29

Рид, я кажется понял, почему у меня не получилось отослать сообщение с windows-приложения. Если получится, сделаю и windows-клиента.

#4 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 08 Декабрь 2014 - 15:05

Рид, я кажется понял, почему у меня не получилось отослать сообщение с windows-приложения. Если получится, сделаю и windows-клиента.



Потом выложу кроссплатформенный клиент в jar формате. Можно будет с компьютера соединяться. Он в принципе есть, на нем тестировал и отрабатывал соединения с мостом перед тем, как перевести на андроид

#5 Оффлайн   Donny

Donny
  • Пользователи
  • Сообщений: 24
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 09 Декабрь 2014 - 02:11

На мой взгляд сильной визуальной стилизации не нужно, совершенно точно необходима система ключей, но в консольном виде ничего плохого нет. Однако может быть имеет смысл добавить хоткеи куда можно забиндить определённые команды которые будут использоваться чаще других. Однако как мне кажется легче пойти другим путём - создать клиентскую программу на ОК, это будет базовая программа с описанием и примерами что бы любой мог разобраться, так же в теме где будет размещена программа\пастебин приложить различные модули к этой программе (например начиная с elseif) на подачу редстоун сигнала, на проверку состояния и так далее. Чем менее требовательно и минималистичнее тем лучше и нам и вам.



#6 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 15 Декабрь 2014 - 02:53

Написал ОС часть, которую можно подгрузить в свою программу и использовать. Написал об этом в своем блоге



#7 Оффлайн   DUIIIES

DUIIIES
  • Пользователи
  • Сообщений: 280
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородКоролёв

Награды

     

Отправлено 15 Декабрь 2014 - 08:20

Написал ОС часть, которую можно подгрузить в свою программу и использовать. Написал об этом в своем блоге


Рид, а самого приложения в общем доступе пока что нет?

#8 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 15 Декабрь 2014 - 12:45

Рид, а самого приложения в общем доступе пока что нет?

В нем один критичный баг, который я думаю исправить на выходных. А так в принципе оно готово, в дальнейшем будет лишь изменяться внешний интерфейс, в роде закладок, спекуляции ввода и тд.



#9 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 16 Декабрь 2014 - 11:37

Выложил первую версию приложения для андроид. Ссылка в конце первого топика, под картинками.

При попытке отослать сообщение на мост после разрыва соединения с мостом - будет происходить краш приложения. Об этом баге знаю, на выходных исправлю


  • DUIIIES это нравится

#10 Оффлайн   DUIIIES

DUIIIES
  • Пользователи
  • Сообщений: 280
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородКоролёв

Награды

     

Отправлено 16 Декабрь 2014 - 13:49

Выложил первую версию приложения для андроид. Ссылка в конце первого топика, под картинками.
При попытке отослать сообщение на мост после разрыва соединения с мостом - будет происходить краш приложения. Об этом баге знаю, на выходных исправлю


Затестил приложение, увидел 2 не очень приятных штуки:
1. Экран не ворочается, что очень неприятно при работе на планшетах с дополнительной клавиатурой;
2. Нет возможности отправлять сообщение нажатием Enter, что не очень удобно порой.

В остальном всё удобно и практично)

#11 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 18 Декабрь 2014 - 13:19

Я так понимаю, ключ может быть произвольной строкой, не только набором цифр?
Может ли один ОС-компьютер держать одновременно несколько соединений, созданных при помощи разных ключей?

А что будет если кто то не закроет за собой соединение?



#12 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 18 Декабрь 2014 - 14:10

 

Я так понимаю, ключ может быть произвольной строкой, не только набором цифр?
Может ли один ОС-компьютер держать одновременно несколько соединений, созданных при помощи разных ключей?

А что будет если кто то не закроет за собой соединение?

 

Конечно можно любой ключ,хоть строка на 1 мегабайт.Только в начале строки нужно поставить метку,что это OC ,или Android. 


Сообщение отредактировал NEO: 18 Декабрь 2014 - 14:11


#13 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 24 Декабрь 2014 - 22:47

Здравствуйте уважаемые формучане,По просьбе 1Ridav дописать Библиотеку,мы решили с Totoro совместно ее до делать.Ув. Totoro если что меня дополнит ниже в сообщениях.

Библиотека работает на ивентах.

Pastebin: http://pastebin.com/dETumgeU

lib= require('bridge')
event= require('event')
lib.init()
lib.auth('123')
while true do
   lib.pull()
   events,message= event.pull()
   if (events == 'bridge_message') then
      print(message)
   end
end
lib.finish()

Событие которое создаёт библиотека,называется 'bridge_message',аргумент всего один ,и он несет в себе сообщение.

Мы добавили обработчик команд,называются Хендлер, то есть см код ниже

function fhw()
   print('Hello World')
end

lib= require('bridge')
event= require('event')
lib.init()
lib.auth('123')
lib.addHandler('hw',fhw)
while true do
   lib.pull()
end 
lib.finish()

addHandler добавляет в список команду,и функцию если вы передадите hw из андроида,тогда сработает функция fhw ,и выведет Hello World.

removeHandler удаляет хендлер из списка.

  • init(): boolean

Устанавливает соединение с мостом.

  • auth(key: string): boolean

Авторизуется на мосту используя переданный ключ.

  • pull()

Проверяет сообщения с моста. Если сообщение пришло - создает эвент bridge_message и управляет хандлерами.

  • addHandler(command: string, callback: function)

Создает новый хандлер: это пара "команда-функция". То есть, когда от моста приходит команда, с аргументами через пробел, хандлер вызовет соответствующую функцию, передав ей все аргументы в виде строк.

  • removeHandler(command: string)

Удаляет хандрер "повешенный" на заданную команду.

  • finish()

Закрывает соединение с мостом и завершает работу.


Сообщение отредактировал NEO: 24 Декабрь 2014 - 23:44

  • 1Ridav это нравится

#14 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 24 Декабрь 2014 - 23:52

Ну так теперь надо мост CC-OC делать.

#15 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 25 Декабрь 2014 - 00:22

уже сделали для тебя.



#16 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 25 Декабрь 2014 - 00:24

Ну так теперь надо мост CC-OC делать.

Это несложно. Получится примерно такая программа:

local event = require('event')
local br = require('bridge')
local modem = require('component').modem

local PORT = 27

modem.open(PORT)

local ready = false
ready = br.init()
print("Подключение: ", ready)
if not ready then
  print("[ОШИБКА] Не удалось установить соединение с мостом. Проверьте наличие интернет платы!")
end

io.write("Введите ключ: ")
local key = io.read()
ready = br.auth(key)
print("Авторизация: ", ready)
if not ready then
  print("[ОШИБКА] Не удалось авторизоваться с выбранным ключем!")
else
  print("Авторизация успешна.")
end

print("Нажмите любую клавишу для выхода.")

while ready do
  br.pull()
  name, data = event.pull(0.5)
  if name == 'key_down' then break
  elseif name == 'socket_message' then
    modem.broadcast(data)
  end
end

modem.close()
br.finish()
print("Трансляция завершена.")


#17 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 25 Декабрь 2014 - 12:31

А есть ли возможность ОС-компьютер включить в Craftnet?

СС-компьютер подключается по Craftnet к ОС-компьютеру. То подключается к мосту и регистрирует канал с именем, совпадающим с адресом СС-компьютера. Может ли такой ОС-компьютер обслуживать несколько клиентов?



#18 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 015
  • Уровень сигнала: 148,95%
  • В игре: 1279 час. 35 мин.

Награды

                                               

Отправлено 25 Декабрь 2014 - 12:57

Здравствуйте уважаемые формучане,По просьбе 1Ridav дописать Библиотеку,мы решили с Totoro совместно ее до делать.Ув. Totoro если что меня дополнит ниже в сообщениях.

Библиотека работает на ивентах.

Pastebin: http://pastebin.com/dETumgeU

Особенно порадовала строчка 93 :lol:


  • SergOmarov это нравится

#19 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 25 Декабрь 2014 - 16:46

А есть ли возможность ОС-компьютер включить в Craftnet?

СС-компьютер подключается по Craftnet к ОС-компьютеру. То подключается к мосту и регистрирует канал с именем, совпадающим с адресом СС-компьютера. Может ли такой ОС-компьютер обслуживать несколько клиентов?

Мне нужно разобраться с подключением к CraftNet из OC. Думаю, особых проблем не будет.

Что касается нескольких клиентов: программа может авторизоваться несколько раз, с разными ключами. Но, она не сможет отсортировать приходящие сообщения. Мост не уточняет для какого ключа сообщение (или от какого). Поэтому они будут просто приходить кучей, со всех ключей.

 

Особенно порадовала строчка 93 :lol:

:)



#20 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 25 Декабрь 2014 - 16:49

Мост не уточняет для какого ключа сообщение (или от какого). Поэтому они будут просто приходить кучей, со всех ключей.

 

Рид, можно допилить мост?



#21 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 25 Декабрь 2014 - 17:03

зеро зачем тебе это?

#22 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 25 Декабрь 2014 - 17:07

Рид, можно допилить мост?

Можно хедеры добавить, так сказать обернуть фантиком



#23 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 25 Декабрь 2014 - 17:21

зеро зачем тебе это?

Два СС-клиента с CraftNet-адресами route1.client1 и route2.client2 конектятся к ОС-шлюзу.

Шлюз цепляется к мосту и регистрирует два канала "route1.client1" и "route2.client2"

С другой стороны моста цепляются два Android-приложения, одно к каналу "route1.client1", другое - к "route2.client2"

Всё, что шлюз получает по каналу "routeN.clientN" он транслирует соответствующему клиенту через CraftNet. И наоборот.

Нужно только, что бы шлюз мог определять по какому каналу он получил посылку.

Такая схема позволит пользоваться мостом не только ОС, но и СС-компьютерам.



#24 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 787
  • Уровень сигнала: 46,35%
  • В игре: 398 час. 9 мин.

Награды

                 

Отправлено 25 Декабрь 2014 - 20:51

А что будет, если сервер перезагрузиться? Мое андроид устройство сможет дальше находиться в конекте с ОС ПК и продолжит ли оно получать сообщения от него. Соединение Андроид - МОСТ- ПК ОС восстановиться автоматически, при условии, что ПК в загруженном чанке?



#25 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 230
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 25 Декабрь 2014 - 22:01

На сколько знаю, ОС-компьютер продолжает работать с того места, где его прервали. А вот сокет врядли восстановится. Так что, скорее всего, будет потеря соединения. Компьютер должен периодически контролировать соединение и восстанавливать в случае потери.
  • Alex это нравится

#26 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 787
  • Уровень сигнала: 46,35%
  • В игре: 398 час. 9 мин.

Награды

                 

Отправлено 25 Декабрь 2014 - 22:13

На сколько знаю, ОС-компьютер продолжает работать с того места, где его прервали. А вот сокет врядли восстановится. Так что, скорее всего, будет потеря соединения. Компьютер должен периодически контролировать соединение и восстанавливать в случае потери.

 

Воооооот, на это я и намекал, в либе этого вроде как не предусмотрено. И надо у Рида спросить, как там мост это все дело генерирует, восстановит ли он соединение с тем же ключом, который хранит ПК, хранит ли мост какую-то базу ключей, резервирует ли их, там длина то их вроде 16 символов "А-z 0-9", совпадение то вряд ли когда-либо возникнет, но важен именно факт автоматического  восстановления соединения при перезагрузках игрового сервера или моста.



#27 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 25 Декабрь 2014 - 22:17

А что будет, если сервер перезагрузиться? Мое андроид устройство сможет дальше находиться в конекте с ОС ПК и продолжит ли оно получать сообщения от него. Соединение Андроид - МОСТ- ПК ОС восстановиться автоматически, при условии, что ПК в загруженном чанке?

Соединение восстановится, если использована функция read(). Андроид получит уведомление от моста о потере соединения с партнером. Мост автоматически восстановит соединение, если партнер появится в сети.

 

На сколько знаю, ОС-компьютер продолжает работать с того места, где его прервали. А вот сокет врядли восстановится. Так что, скорее всего, будет потеря соединения. Компьютер должен периодически контролировать соединение и восстанавливать в случае потери.

Если соединение оборвется по любым причинам - соединение восстановится. read() функция сокета возвращает статус false и значение nil, если сокет закрыт. При получении нила достаточно переподключиться, а затем авторизироваться на мосту.


  • Alex это нравится

#28 Оффлайн   KavomatovlHire

KavomatovlHire
  • Пользователи
  • Сообщений: 1
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 07 Январь 2015 - 19:50

Из описания на маркете - "Каждый раз генерируется новый уровень. Иногда это может быть даже невозможно пройти." И что это за лажа? Попробую поиграться. Расскажу что как.

#29 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Автор темы
  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 3,84%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 07 Январь 2015 - 19:56

Из описания на маркете - "Каждый раз генерируется новый уровень. Иногда это может быть даже невозможно пройти." И что это за лажа? Попробую поиграться. Расскажу что как.

Какое отношение софт с гугл маркета имеет к нашей программе? Её нет в гугл маркете...


  • DUIIIES это нравится

#30 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 02 Апрель 2015 - 16:10

1Ridav, на сервере, на сокет один поток?




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных