Пример #1
0
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...");
}
Пример #2
0
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;
}