void WorldSession::SendExternalMails() { sLog.outDebug("External Mail - Send Mails from Queue..."); QueryResult* result = CharacterDatabase.Query("SELECT id,receiver,subject,message,money,item,item_count FROM mail_external"); if (!result) { sLog.outDebug("External Mail - No Mails in Queue..."); return; } else { do { Field *fields = result->Fetch(); uint32 id = fields[0].GetUInt32(); Player *pReceiver = sObjectMgr.GetPlayer(fields[1].GetUInt64()); std::string subject = fields[2].GetString(); std::string message = fields[3].GetString(); uint32 money = fields[4].GetUInt32(); uint32 ItemID = fields[5].GetUInt32(); uint32 ItemCount = fields[6].GetUInt32(); if (pReceiver) { MailDraft draft; draft.SetSubjectAndBody(subject, message); MailSender sender(MAIL_NORMAL, pReceiver ? pReceiver->GetObjectGuid().GetCounter() : 0, MAIL_STATIONERY_GM); MailReceiver reciever(pReceiver, pReceiver->GetObjectGuid()); sLog.outDebug("External Mail - Sending mail to %u, Item:%u", pReceiver->GetObjectGuid().GetCounter(), ItemID); uint32 itemTextId = !message.empty() ? sObjectMgr.CreateItemText(message) : 0; if (ItemID != 0) { Item* ToMailItem = Item::CreateItem(ItemID, ItemCount, pReceiver); if (ToMailItem) { ToMailItem->SaveToDB(); draft.AddItem(ToMailItem); } draft.SetMoney(money); } else draft.SetMoney(money); draft.SendMailTo(reciever,sender,MAIL_CHECK_MASK_RETURNED); CharacterDatabase.PExecute("DELETE FROM mail_external WHERE id=%u", id); } else sLog.outDebug("External Mail - Mail with unknown player GUID %u in mail_external",fields[1].GetUInt32()); } while(result->NextRow()); } sLog.outDebug("External Mail - All Mails Sent..."); }
int main(int argc, char* argv[]) { UDPPlus *conn = new UDPPlus; UDPPlusConnection *open; int role = 0; const int PORT = 9555; boost::thread *myThread; // determine if this will be a server or client application cout << endl << "UDP+ Test Driver" << endl << "=====================================================" << endl; cout << "Assign application role: [1] server [2] client" << endl; cin >> role; switch (role) { // Application is a server case 1: // setup sockadr_in struct struct sockaddr_in local; memset((char *) &local, 0, sizeof(local)); local.sin_family = AF_INET; local.sin_port = htons(PORT); local.sin_addr.s_addr = INADDR_ANY; // bind the port // this also starts the listener thread //printf("Binding to port..."); conn->bind_p( (struct sockaddr *) &local, sizeof(local)); // start waiting for an incoming connection // if a new host is detected, listener thread will direct it to accept //printf("Waiting for client connection..."); open = conn->accept_p(); //myThread = new boost::thread(&sender, open); reciever(open); //myThread->join(); delete open; delete conn; break; // Application is a client case 2: default: // setup sockaddr_in struct struct sockaddr_in host; memset((char *) &host, 0, sizeof(host)); host.sin_family = AF_INET; host.sin_port = htons(PORT); inet_pton(AF_INET, "127.0.0.1", &host.sin_addr); // this will also start the listener thread for receiving data open = conn->conn( (struct sockaddr *) &host, sizeof(host)); // myThread = new boost::thread(&sender, open); sender(open); cout << "Sending Finished: Joining Recieving thread" << endl; //myThread->join(); open->closeConnection(); delete open; delete conn; break; } return 0; }