Jump to content

Digest August

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

Работа с почтой


zhem4ag
 Share

Recommended Posts

Недавно захотел написать свой аддон и для начала хотел поработать с почтой, но столкнулся со следующей проблемой.

Мне нужно было узнать число писем в почтовом ящике и для этого я написал следующее:

Code:

Global("wtMainPanel", nil)

Global("wtText", nil)

Global("mailIds", {})

function RegEvents() 

common.RegisterEventHandler(OnMailboxActivated, "EVENT_MAILBOX_ACTIVATED")

end

function RegWidgets()

wtMainPanel = mainForm:GetChildChecked("MainPanel", false)

wtText = wtMainPanel:GetChildChecked("Text", false)

end

function OnMailboxActivated()

mailIds = mailBox.RequestMailIds()

local mailCount = GetTableSize(mailIds)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

function Init()

RegEvents()

RegWidgets()

end

Init()

В результате на экране я увидел 0, хотя в почте есть письма, правда они все были открыты.

Или функция RequestMailIds() возвращает только Id непрочитанных писем?

Если так, то как можно узнать список Id всех писем в почтовом ящике?

Link to comment
Share on other sites

Вроде, всё написано правильно.

Функция mailBox.RequestMailIds() используется в аддонах AutoDeleteMail и AucEDSman именно для получения количества писем.

Может быть, какая-то другая ошибка произошла, может, что-нибудь есть в логе Mods.txt?

Кстати, эта функция, "при необходимости" запрашивает данные с сервера:

Quote:
Выдает текущий известный список писем. При необходимости отсылается запрос на обновление списка. При необходимости отсылается запрос на обновление списка.

В аддоне AutoDeleteMail, она, для верности, окружена проверкой на mailBox.IsReady():

Code:
if mailBox.IsReady() then

mailTempList = mailBox.RequestMailIds()

end

Link to comment
Share on other sites

Не понимаю я чего-то. В теории всё должно работать. Дополнил функцию:

Code:

function OnMailboxActivated()

LogInfo("mailStart...")

if mailBox.IsActive() then

mailIds = mailBox.RequestMailIds()

end

local mailCount = GetTableSize(mailIds)

LogInfo("mailCount = ", mailCount)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

И на экране я вижу 0 и в mods.txt не вижу ошибок, только то что я хотел вывести:

Code:

Info: addon Test: mailStart...

Info: addon Test: mailCount = 0

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

Есть идеи?

Link to comment
Share on other sites

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

Если не поможет, то можно пробовать миксовать код рабочего аддона с нерабочим. Буквально, взять какой-нибудь AucEDSman или AutoDeleteMail, и постепенно превращать его в свой аддон, проверяя на каждом шаге, работает ли он. До тех пор, пока он не превратится в твой аддон, только рабочий. Затем, если будет всё ещё неясно, в чём разница между рабочей и нерабочей версиями аддона - сравнить их в WinMerge.

Link to comment
Share on other sites

  • 2 weeks later...

нет - код нормальный но логика ненормальная

дело в том что в такой системе как клиент-сервер все надо строить на событиях - а событие OnMailboxActivated() - не дает факта о том что получен список.

короче говоря - окно почты хоть и открыто, но список писем еще не получен

попробуйте эти события:

EVENT_MAILS_CHANGED

EVENT_MAILBOX_CHANGED

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use