diff --git a/stepmania/src/smlobby/SendFileDialog.cpp b/stepmania/src/smlobby/SendFileDialog.cpp index 27c24c8c05..a446689c1c 100644 --- a/stepmania/src/smlobby/SendFileDialog.cpp +++ b/stepmania/src/smlobby/SendFileDialog.cpp @@ -12,27 +12,26 @@ static char THIS_FILE[] = __FILE__; #endif +///////////////////////////////////////////////////////////////////////////// +// CSendFileDialog port management data +std::vector CSendFileDialog::m_usedPorts; +std::vector CSendFileDialog::m_hThread; +std::vector CSendFileDialog::m_transferDialogs; + +const unsigned short CSendFileDialog::kFirstPort = 1024; +const unsigned short CSendFileDialog::kLastPort = 5000; + ///////////////////////////////////////////////////////////////////////////// // CSendFileDialog dialog -CSendFileDialog::CSendFileDialog(CWnd* pParent /*=NULL*/) +CSendFileDialog::CSendFileDialog(DCCTransferInfo dccinfo, CWnd* pParent) : CDialog(CSendFileDialog::IDD, pParent) { //{{AFX_DATA_INIT(CSendFileDialog) - m_BytesSent = _T(""); - m_Filesize = _T(""); - m_FolderName = _T(""); - m_FileName = _T(""); - m_RecvrName = _T(""); - m_TimeLeft = _T(""); - m_XferRate = _T(""); - m_XferStatus = _T(""); - m_SentRecvd = _T(""); - m_ToFrom = _T(""); //}}AFX_DATA_INIT - m_bIsCanceled = false; + m_dccInfo = dccinfo; } @@ -40,33 +39,410 @@ void CSendFileDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSendFileDialog) + DDX_Control(pDX, IDC_XFERSTATUS, m_XferStatus); + DDX_Control(pDX, IDC_XFERRATE, m_XferRate); + DDX_Control(pDX, IDC_TOFROM, m_ToFrom); + DDX_Control(pDX, IDC_TIMELEFT, m_TimeLeft); + DDX_Control(pDX, IDC_SENTRECVD, m_SentRecvd); + DDX_Control(pDX, IDC_RECVRNAME, m_RecvrName); + DDX_Control(pDX, IDC_FOLDERNAME, m_FolderName); + DDX_Control(pDX, IDC_FILESIZE, m_Filesize); + DDX_Control(pDX, IDC_FILENAME, m_FileName); + DDX_Control(pDX, IDC_BYTESSENT, m_BytesSent); DDX_Control(pDX, IDC_PROGRESS1, m_ProgressFile); - DDX_Text(pDX, IDC_BYTESSENT, m_BytesSent); - DDX_Text(pDX, IDC_FILESIZE, m_Filesize); - DDX_Text(pDX, IDC_FOLDERNAME, m_FolderName); - DDX_Text(pDX, IDC_FILENAME, m_FileName); - DDX_Text(pDX, IDC_RECVRNAME, m_RecvrName); - DDX_Text(pDX, IDC_TIMELEFT, m_TimeLeft); - DDX_Text(pDX, IDC_XFERRATE, m_XferRate); - DDX_Text(pDX, IDC_XFERSTATUS, m_XferStatus); - DDX_Text(pDX, IDC_SENTRECVD, m_SentRecvd); - DDX_Text(pDX, IDC_TOFROM, m_ToFrom); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSendFileDialog, CDialog) //{{AFX_MSG_MAP(CSendFileDialog) + ON_WM_TIMER() //}}AFX_MSG_MAP END_MESSAGE_MAP() +///////////////////////////////////////////////////////////////////////////// +// CSendFileDialog shared data management functions +unsigned short CSendFileDialog::MakePortReservation() +{ + //Assume the first port number is open + unsigned short uiPort = kFirstPort; + + //if there are no used ports in the list use the first one + if (m_usedPorts.size() <= 0) + m_usedPorts.push_back(kFirstPort); + + //next see if the port range is saturated (pigeon hole principal) + else if ((*m_usedPorts.end() - kFirstPort + 1) >= m_usedPorts.size()) + m_usedPorts.push_back(*m_usedPorts.end() + 1); + + //there must be a find a gap in the used port list + //since the list is always sorted + else + { + std::vector::iterator iter; + for (iter = m_usedPorts.begin(); iter < m_usedPorts.end(); iter++) + { + //oops, this port is being used, let's try the next one over + if (*iter == uiPort) uiPort++; + //looks like we found a gap, stop here + else break; + } + + //Insert our port number into the gap we just found + m_usedPorts.insert(iter, uiPort); + } + + return uiPort; +} + +void CSendFileDialog::FreePort(unsigned short port) +{ + //Tell used port list that this port is now open + std::vector::iterator iter; + for (iter = m_usedPorts.begin(); iter < m_usedPorts.end(); iter++) + { + //Find the port number, remove it + if (*iter == port) + { + m_usedPorts.erase(iter); + return; + } + } +} + +void CSendFileDialog::AddTransferDialog(CSendFileDialog *ptr) +{ + if (ptr == NULL) return; + + m_transferDialogs.push_back(ptr); +} + +void CSendFileDialog::FreeAnyCompletedTransfers() +{ + //remove all file transfer dialogs that are completed + std::vector::iterator iter; + CSendFileDialog *dlg; + DCCTransferInfo info; + while (iter < m_transferDialogs.end()) + { + dlg = *iter; + info = dlg->m_dccInfo; + if (info.m_ulBytesSent >= info.m_ulFileSize && + info.m_bIsConnected == false) + { + delete dlg; + iter = m_transferDialogs.erase(iter); + } + else + { + iter++; + } + } +} + ///////////////////////////////////////////////////////////////////////////// // CSendFileDialog message handlers +void CSendFileDialog::OnTimer(UINT nIDEvent) +{ + if (m_dccInfo.m_bIsSender) SendSomeData(); + else RecvSomeData(); + + CDialog::OnTimer(nIDEvent); +} + void CSendFileDialog::OnCancel() { - //Thread is going to check up on us to see if it's time to bail - m_bIsCanceled = true; + const unsigned int kTimerID = 1000; + + //See if a file pointer got left open + if (m_dccInfo.m_fp != NULL) + fclose(m_dccInfo.m_fp); + + //See if a socket got left open + if (m_dccInfo.m_sock == true) + m_dccInfo.m_sock.Close(); + + //See if we need to free a port reservation + if (m_dccInfo.m_bIsSender == true && m_dccInfo.m_uiPort >= kFirstPort) + FreePort(m_dccInfo.m_uiPort); + + //Now we are no longer connected + m_dccInfo.m_bIsConnected = false; + + //kill the timer + KillTimer(kTimerID); CDialog::OnCancel(); } + +int CSendFileDialog::Setup() +{ + //Wait 50 ms between checking for data + const unsigned int kPortCheckDelay = 50; + const unsigned int kTimerID = 1000; + + //Depending on whether we are sending or recieving + // we have to set up differently + int ret; + if (m_dccInfo.m_bIsSender) ret = SetupSend(); + else ret = SetupRecv(); + + //See if we were able to set up a connection + if (-1 == ret) + { + if (m_dccInfo.m_sock == true) m_dccInfo.m_sock.Close(); + if (m_dccInfo.m_fp != NULL) fclose(m_dccInfo.m_fp); + return -1; + } + + //Setup a timer which routinely checks up on the data + if ( SetTimer(kTimerID, kPortCheckDelay, NULL) < 0 ) + return -1; + + return 0; +} + +///////////////////////////////////////////////////////////////////////////// +// CSendFileDialog dcc file transfer functions +int CSendFileDialog::SetupSend() +{ + const unsigned long k_ulTimeout = 30000; //30 second timeout + + //Make sure we are sending... + ASSERT (m_dccInfo.m_bIsSender); + + //Remember when we started + m_dccInfo.m_ulStartTime = GetTickCount(); + + //Setup the status info on the dialog + m_BytesSent.SetWindowText("0 bytes"); + m_ProgressFile.SetRange(0, 100); + m_ProgressFile.SetPos(0); + m_FolderName.SetWindowText(LPCTSTR(m_dccInfo.m_directory)); + m_FileName.SetWindowText(LPCTSTR(m_dccInfo.m_fileName)); + m_RecvrName.SetWindowText(LPCTSTR(m_dccInfo.m_partnerName)); + m_TimeLeft.SetWindowText("Infinite"); + m_XferRate.SetWindowText("0 bytes/sec"); + m_XferStatus.SetWindowText("Waiting to Connect..."); + m_SentRecvd.SetWindowText("Sent:"); + m_ToFrom.SetWindowText("To:"); + + char filesize[32]; + sprintf(filesize, "%lu bytes", m_dccInfo.m_ulFileSize); + m_Filesize.SetWindowText(filesize); + + //Show the dialog and tell it about this server + ShowWindow(SW_SHOW); + + //Tell user file transfer has started + m_XferStatus.SetWindowText("Sending File..."); + + //Create a file to write incoming data to + CString filename = m_dccInfo.m_directory+m_dccInfo.m_fileName; + m_dccInfo.m_fp = fopen(filename, "rb"); + + //bail if we can't open the file + if ( !m_dccInfo.m_fp ) return -1; + + //Create a port to listen on + IPaddress ip; + TCPsocket waitSock, newSock; + SDLNet_ResolveHost(&ip, NULL, m_dccInfo.m_uiPort); + waitSock = SDLNet_TCP_Open(&ip); + if ( !waitSock ) return -1; + + //Wait for someone to connect to us + unsigned long ulTime; + do + { + ulTime = GetTickCount() - m_dccInfo.m_ulStartTime; + newSock = SDLNet_TCP_Accept(waitSock); + } while ( !newSock && ulTime < k_ulTimeout); + + //Make sure the socket is valid + if ( !newSock ) return -1; + + //Now data can be sent on this socket + m_dccInfo.m_sock = Socket(newSock); + m_dccInfo.m_bIsConnected = true; + + return 0; +} + +int CSendFileDialog::SetupRecv() +{ + //Make sure we are not sending... + ASSERT(!m_dccInfo.m_bIsSender); + + //Remember when we started + m_dccInfo.m_ulStartTime = GetTickCount(); + + //Setup the status info on the dialog + m_BytesSent.SetWindowText("0 bytes"); + m_ProgressFile.SetRange(0, 100); + m_ProgressFile.SetPos(0); + m_FolderName.SetWindowText(LPCTSTR(m_dccInfo.m_directory)); + m_FileName.SetWindowText(LPCTSTR(m_dccInfo.m_fileName)); + m_RecvrName.SetWindowText(LPCTSTR(m_dccInfo.m_partnerName)); + m_TimeLeft.SetWindowText("Infinite"); + m_XferRate.SetWindowText("0 bytes/sec"); + m_XferStatus.SetWindowText("Waiting to Connect..."); + m_SentRecvd.SetWindowText("Recv'd:"); + m_ToFrom.SetWindowText("From:"); + + char filesize[32]; + sprintf(filesize, "%lu bytes", m_dccInfo.m_ulFileSize); + m_Filesize.SetWindowText(filesize); + + //Show the dialog and tell it about this server + ShowWindow(SW_SHOW); + + //Create an active socket to retrieve data from (close listening socket) + InetAddr addr; + addr.host = htonl(m_dccInfo.m_ulPartnerIP); + addr.port = htons(m_dccInfo.m_uiPort); + m_dccInfo.m_sock.Connect(addr); + + //bail if we can't open the socket + if ( !m_dccInfo.m_sock ) return -1; + else m_dccInfo.m_bIsConnected = true; + + //Tell user file transfer has started + m_XferStatus.SetWindowText("Recieving File..."); + + //Create a file to write incoming data to + CString filename = m_dccInfo.m_directory+m_dccInfo.m_fileName; + m_dccInfo.m_fp = fopen(filename, "wb"); + + //bail if we can't open the file + if ( !m_dccInfo.m_fp ) return -1; + + return 0; +} + +void CSendFileDialog::SendSomeData() +{ + //Make sure the socket and the file descriptor are valid + if (m_dccInfo.m_fp == NULL || m_dccInfo.m_sock != true) return; + + //Make sure we're sending + ASSERT (m_dccInfo.m_bIsSender); + + char szBuf[8193]; + unsigned long cbSend, cbRead, numAck; + float fracSent; + unsigned long seconds, minutes, hours, rate; + + + //See if the file is done transfering + if (m_dccInfo.m_ulBytesSent < m_dccInfo.m_ulFileSize) + { + //Pull a data block from the file + cbRead = fread(szBuf, sizeof(char), m_dccInfo.m_uiXferRate, m_dccInfo.m_fp); + + //Send the next chunk out + cbSend = 0; + while (cbSend <= 0) + cbSend = m_dccInfo.m_sock.Send((unsigned char *)szBuf, cbRead); + + //Update sent byte count + m_dccInfo.m_ulBytesSent += cbSend; + + //Make sure chunk gets acknowledged + cbRead = 0; + while( cbRead <= 0) + cbRead = m_dccInfo.m_sock.Receive((unsigned char*)&numAck, 4); + + //Make sure numAck matches current amount of data sent + if (m_dccInfo.m_ulBytesSent != ntohl(numAck)) + { + OnCancel(); + return; + } + + //Update that statistics + fracSent = float(m_dccInfo.m_ulBytesSent)/float(m_dccInfo.m_ulFileSize); + seconds = seconds = (GetTickCount() - m_dccInfo.m_ulStartTime)/1000; + rate = (seconds > 0) ? m_dccInfo.m_ulBytesSent / seconds : 0; + seconds = (unsigned long)(float(seconds)/fracSent); + minutes = (seconds/60) % 60; + hours = (seconds/3600); + seconds = seconds % 60; + + //Update the file transfer window + sprintf(szBuf, "%lu bytes", m_dccInfo.m_ulBytesSent); + m_BytesSent.SetWindowText(szBuf); + sprintf(szBuf, "%luh %lum %lus", hours, minutes, seconds); + m_TimeLeft.SetWindowText(szBuf); + sprintf(szBuf, "%lu bytes/sec", rate); + m_XferRate.SetWindowText(szBuf); + m_ProgressFile.SetPos(int(fracSent*100.F)); + } + else + { + //OK, we're all done. Close up shop. + OnCancel(); + } +} + +void CSendFileDialog::RecvSomeData() +{ + //Make sure socket and file descriptor are valid + if (m_dccInfo.m_sock != true || m_dccInfo.m_fp == NULL) return; + + //Make sure were not sending + ASSERT (!m_dccInfo.m_bIsSender); + + char szBuf[8193]; + unsigned long cbRead, cbSent, replyTotal; + float fracSent; + unsigned long seconds, minutes, hours, rate; + + + //Start grabbing data blocks + if (m_dccInfo.m_ulBytesSent < m_dccInfo.m_ulFileSize) + { + //Grab the next buffer + cbRead = m_dccInfo.m_sock.Receive((unsigned char*)szBuf, sizeof(szBuf)-1); + + //Bail if there is nothing to read + if( cbRead <= 0 ) return; + else szBuf[cbRead] = '\0'; + + //Write it to file + fwrite(szBuf, cbRead, 1, m_dccInfo.m_fp); + + //update byte count + m_dccInfo.m_ulBytesSent += cbRead; + + //Update the file transfer statistics + fracSent = float(m_dccInfo.m_ulBytesSent)/float(m_dccInfo.m_ulFileSize); + seconds = (GetTickCount() - m_dccInfo.m_ulStartTime)/1000; + rate = (seconds > 0) ? m_dccInfo.m_ulBytesSent / seconds : 0; + seconds = (unsigned long)(float(seconds)/fracSent); + minutes = (seconds/60) % 60; + hours = (seconds/3600); + seconds = seconds % 60; + + //Update the file transfer window + sprintf(szBuf, "%lu bytes", m_dccInfo.m_ulBytesSent); + m_BytesSent.SetWindowText(szBuf); + sprintf(szBuf, "%luh %lum %lus", hours, minutes, seconds); + m_TimeLeft.SetWindowText(szBuf); + sprintf(szBuf, "%lu bytes/sec", rate); + m_XferRate.SetWindowText(szBuf); + m_ProgressFile.SetPos(int(fracSent*100.F)); + + //Tell the sender how many bytes we received + replyTotal = htonl(m_dccInfo.m_ulBytesSent); + + //Send out response + cbSent = m_dccInfo.m_sock.Send((unsigned char *)&replyTotal, 4); + } + else + { + OnCancel(); + return; + } +} diff --git a/stepmania/src/smlobby/SendFileDialog.h b/stepmania/src/smlobby/SendFileDialog.h index b9213f0fa4..d7528eea7c 100644 --- a/stepmania/src/smlobby/SendFileDialog.h +++ b/stepmania/src/smlobby/SendFileDialog.h @@ -14,26 +14,60 @@ class CSendFileDialog : public CDialog { +// Public data types +public: + // DCC Info + struct DCCTransferInfo + { + bool m_bIsSender; + bool m_bIsConnected; + CString m_fileName; + CString m_directory; + CString m_partnerName; + unsigned long m_ulPartnerIP; + unsigned int m_uiPort; + unsigned long m_ulFileSize; + unsigned long m_ulBytesSent; + unsigned long m_ulStartTime; + unsigned int m_uiXferRate; + Socket m_sock; + FILE* m_fp; + + DCCTransferInfo() : + m_bIsSender(false), + m_bIsConnected(false), + m_ulPartnerIP(0L), + m_uiPort(0), + m_ulFileSize(0L), + m_ulBytesSent(0L), + m_ulStartTime(0L), + m_uiXferRate(0), + m_fp(NULL) + {} + }; + // Construction public: - CSendFileDialog(CWnd* pParent = NULL); // standard constructor + // standard constructor + CSendFileDialog(DCCTransferInfo dccinfo, CWnd* pParent = NULL); // Dialog Data //{{AFX_DATA(CSendFileDialog) enum { IDD = IDD_FILEXFER }; + CStatic m_XferStatus; + CStatic m_XferRate; + CStatic m_ToFrom; + CStatic m_TimeLeft; + CStatic m_SentRecvd; + CStatic m_RecvrName; + CStatic m_FolderName; + CStatic m_Filesize; + CStatic m_FileName; + CStatic m_BytesSent; CProgressCtrl m_ProgressFile; - CString m_BytesSent; - CString m_Filesize; - CString m_FolderName; - CString m_FileName; - CString m_RecvrName; - CString m_TimeLeft; - CString m_XferRate; - CString m_XferStatus; - CString m_SentRecvd; - CString m_ToFrom; //}}AFX_DATA + DCCTransferInfo m_dccInfo; // Overrides // ClassWizard generated virtual function overrides @@ -44,16 +78,32 @@ public: // Implementation public: - bool isCanceled() { return m_bIsCanceled; } + int Setup(); + static unsigned short MakePortReservation(); + static void AddTransferDialog(CSendFileDialog *ptr); + static void FreeAnyCompletedTransfers(); + +protected: + void FreePort(unsigned short port); + int SetupSend(); + int SetupRecv(); + void SendSomeData(); + void RecvSomeData(); protected: - bool m_bIsCanceled; + static std::vector m_hThread; + static std::vector m_usedPorts; + static std::vector m_transferDialogs; + + static const unsigned short kFirstPort; + static const unsigned short kLastPort; protected: // Generated message map functions //{{AFX_MSG(CSendFileDialog) virtual void OnCancel(); + afx_msg void OnTimer(UINT nIDEvent); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/stepmania/src/smlobby/irc.cpp b/stepmania/src/smlobby/irc.cpp index 60fcce49ba..a96068fd66 100644 --- a/stepmania/src/smlobby/irc.cpp +++ b/stepmania/src/smlobby/irc.cpp @@ -195,6 +195,7 @@ bool CIrcSession::Connect(const CIrcSessionInfo& info) m_socket.Send("USER %s %s %s :%s\r\n", info.sUserID.c_str(), szHostName, "server", info.sFullName.c_str()); + } catch( const char* ) { @@ -339,7 +340,7 @@ void CIrcSession::RemoveMonitor(IIrcSessionMonitor* pMonitor) //////////////////////////////////////////////////////////////////// CIrcSessionInfo::CIrcSessionInfo() - : iPort(0), bIdentServer(false), iIdentServerPort(0) + : iPort(0), bIdentServer(false), iIdentServerPort(0), bIsGameHost(false), luSongHash(0L) { } @@ -353,7 +354,12 @@ CIrcSessionInfo::CIrcSessionInfo(const CIrcSessionInfo& si) sPassword(si.sPassword), bIdentServer(si.bIdentServer), sIdentServerType(si.sIdentServerType), - iIdentServerPort(si.iIdentServerPort) + iIdentServerPort(si.iIdentServerPort), + bIsGameHost(si.bIsGameHost), + sSongPath(si.sSongPath), + luSongHash(si.luSongHash), + sHostName(si.sHostName), + sHostIP(si.sHostIP) { } @@ -369,6 +375,14 @@ void CIrcSessionInfo::Reset() bIdentServer = false; sIdentServerType = ""; iIdentServerPort = 0; + + bIsGameHost = false; + sSongPath = ""; + luSongHash = 0L; + sHostName = ""; + sHostIP = ""; + + } //////////////////////////////////////////////////////////////////// @@ -469,7 +483,7 @@ DWORD WINAPI CIrcIdentServer::ListenProc(LPVOID pparam) } //////////////////////////////////////////////////////////////////// -std::vector CIrcDCCServer::m_usedPorts; +/*std::vector CIrcDCCServer::m_usedPorts; std::vector CIrcDCCServer::m_hThread; const unsigned short CIrcDCCServer::kFirstPort = 1024; const unsigned short CIrcDCCServer::kLastPort = 5000; @@ -558,7 +572,7 @@ bool CIrcDCCServer::Start(DCCTransferInfo dccinfo) dccinfo.m_pDCCSever = this; //Create the appropriate thread, but don't start it just yet - /*if (dccinfo.m_bIsSender) + if (dccinfo.m_bIsSender) dccinfo.m_pThread = CreateThread(NULL, 0, DoThreadSend, (void *)&dccinfo, CREATE_SUSPENDED, NULL); else @@ -570,12 +584,7 @@ bool CIrcDCCServer::Start(DCCTransferInfo dccinfo) //Now we can fire off the thread if (-1 == ResumeThread(dccinfo.m_pThread)) return false; - Sleep(100);*/ - - if (dccinfo.m_bIsSender) - DoThreadSend((void *)&dccinfo); - else - DoThreadRecv((void *)&dccinfo); + Sleep(100); return true; } @@ -896,7 +905,7 @@ DWORD WINAPI CIrcDCCServer::DoThreadSend(void* dccInfo) } return 0; -} +}*/ //////////////////////////////////////////////////////////////////// diff --git a/stepmania/src/smlobby/irc.h b/stepmania/src/smlobby/irc.h index 74ed7e0f3d..7fcb614e23 100644 --- a/stepmania/src/smlobby/irc.h +++ b/stepmania/src/smlobby/irc.h @@ -15,7 +15,7 @@ #include #include #include "CrossThreadsMessagingDevice.h" -#include "SendFileDialog.h" +//#include "SendFileDialog.h" //////////////////////////////////////////////////////////////////// namespace irc { @@ -76,6 +76,12 @@ struct CIrcSessionInfo String sIdentServerType; unsigned int iIdentServerPort; + bool bIsGameHost; + String sSongPath; + unsigned long luSongHash; + String sHostName; + String sHostIP; + CIrcSessionInfo(); CIrcSessionInfo(const CIrcSessionInfo& si); @@ -103,6 +109,15 @@ public : CIrcSessionInfo& GetInfo() const { return (CIrcSessionInfo&)m_info; } + void SetGameInfo(bool isHost, String sPath, unsigned long luHash, String sHost, String sIP) + { + m_info.bIsGameHost = isHost; + m_info.sSongPath = sPath; + m_info.luSongHash = luHash; + m_info.sHostName = sHost; + m_info.sHostIP = sIP; + } + operator bool() const { return (bool)m_socket; } // send-to-stream operators @@ -166,7 +181,7 @@ private : //////////////////////////////////////////////////////////////////// -class CIrcDCCServer +/*class CIrcDCCServer { public: struct DCCTransferInfo @@ -218,7 +233,7 @@ protected: static DWORD WINAPI DoThreadSend(void* dccinfo); static DWORD WINAPI DoThreadRecv(void* dccinfo); -}; +};*/ //////////////////////////////////////////////////////////////////// diff --git a/stepmania/src/smlobby/res/smlobby.ico b/stepmania/src/smlobby/res/smlobby.ico index 7eef0bcbe6..729a2ae1eb 100644 Binary files a/stepmania/src/smlobby/res/smlobby.ico and b/stepmania/src/smlobby/res/smlobby.ico differ diff --git a/stepmania/src/smlobby/resource2.h b/stepmania/src/smlobby/resource2.h index 4d48c59d58..0602d5647d 100644 --- a/stepmania/src/smlobby/resource2.h +++ b/stepmania/src/smlobby/resource2.h @@ -38,6 +38,10 @@ #define IDC_TOFROM 1023 #define IDC_SENTRECVD 1024 #define IDC_COMBO1 1030 +#define IDC_NEWGAMEFRAME 1031 +#define IDC_SELECT_MUSIC_STATIC 1032 +#define IDC_GAME_NAME_STATIC 1033 +#define IDC_REFRESH_GAME_LIST 1034 // Next default values for new objects // @@ -45,7 +49,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 136 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1031 +#define _APS_NEXT_CONTROL_VALUE 1035 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/stepmania/src/smlobby/smlobby.aps b/stepmania/src/smlobby/smlobby.aps index 6df6bcde33..941644be27 100644 Binary files a/stepmania/src/smlobby/smlobby.aps and b/stepmania/src/smlobby/smlobby.aps differ diff --git a/stepmania/src/smlobby/smlobby.clw b/stepmania/src/smlobby/smlobby.clw index 93651a0a71..838a68798c 100644 --- a/stepmania/src/smlobby/smlobby.clw +++ b/stepmania/src/smlobby/smlobby.clw @@ -2,17 +2,24 @@ [General Info] Version=1 -LastClass=CSmlobbyApp +LastClass=CSendFileDialog LastTemplate=CDialog NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "smlobby.h" +LastPage=0 -ClassCount=2 -Class1=CSmlobbyApp -Class2=CSmlobbyDlg +ClassCount=7 +Class1=CConnectDlg +Class2=CDirectoryDialog +Class3=CEditChat +Class4=CSendFileDialog +Class5=CSmlobbyApp +Class6=CAboutDlg +Class7=CSmlobbyDlg -ResourceCount=1337 -Resource2=IDR_MAINFRAME +ResourceCount=42 +Resource1=IDD_CONNECT (Unknown language: 0xD +Resource2=IDD_CONNECT (Unknown language: 0xD Resource3=IDD_CONNECT (Unknown language: 0xD Resource4=IDD_CONNECT (Unknown language: 0xD Resource5=IDD_CONNECT (Unknown language: 0xD @@ -20,7 +27,7 @@ Resource6=IDD_CONNECT (Unknown language: 0xD Resource7=IDD_CONNECT (Unknown language: 0xD Resource8=IDD_CONNECT (Unknown language: 0xD Resource9=IDD_CONNECT (Unknown language: 0xD -Resource10=IDD_CONNECT (Unknown language: 0xD, 0x1) +Resource10=IDD_CONNECT (Unknown language: 0xD Resource11=IDD_CONNECT (Unknown language: 0xD Resource12=IDD_CONNECT (Unknown language: 0xD Resource13=IDD_CONNECT (Unknown language: 0xD @@ -47,1357 +54,66 @@ Resource33=IDD_CONNECT (Unknown language: 0xD Resource34=IDD_CONNECT (Unknown language: 0xD Resource35=IDD_CONNECT (Unknown language: 0xD Resource36=IDD_CONNECT (Unknown language: 0xD -Resource37=IDD_CONNECT (Unknown language: 0xD +Resource37=IDD_ABOUTBOX Resource38=IDD_CONNECT (Unknown language: 0xD Resource39=IDD_CONNECT (Unknown language: 0xD -Resource40=IDD_CONNECT (Unknown language: 0xD -Resource41=IDD_CONNECT (Unknown language: 0xD -Resource42=IDD_CONNECT (Unknown language: 0xD -Resource43=IDD_CONNECT (Unknown language: 0xD -Resource44=IDD_CONNECT (Unknown language: 0xD -Resource45=IDD_CONNECT (Unknown language: 0xD -Resource46=IDD_CONNECT (Unknown language: 0xD -Resource47=IDD_CONNECT (Unknown language: 0xD -Resource48=IDD_CONNECT (Unknown language: 0xD -Resource49=IDD_CONNECT (Unknown language: 0xD -Resource50=IDD_CONNECT (Unknown language: 0xD -Resource51=IDD_CONNECT (Unknown language: 0xD -Resource52=IDD_CONNECT (Unknown language: 0xD -Resource53=IDD_CONNECT (Unknown language: 0xD -Resource54=IDD_CONNECT (Unknown language: 0xD -Resource55=IDD_CONNECT (Unknown language: 0xD -Resource56=IDD_CONNECT (Unknown language: 0xD -Resource57=IDD_CONNECT (Unknown language: 0xD -Resource58=IDD_CONNECT (Unknown language: 0xD -Resource59=IDD_CONNECT (Unknown language: 0xD -Resource60=IDD_CONNECT (Unknown language: 0xD -Resource61=IDD_CONNECT (Unknown language: 0xD -Resource62=IDD_CONNECT (Unknown language: 0xD -Resource63=IDD_CONNECT (Unknown language: 0xD -Resource64=IDD_CONNECT (Unknown language: 0xD -Resource65=IDD_CONNECT (Unknown language: 0xD -Resource66=IDD_CONNECT (Unknown language: 0xD -Resource67=IDD_CONNECT (Unknown language: 0xD -Resource68=IDD_CONNECT (Unknown language: 0xD -Resource69=IDD_CONNECT (Unknown language: 0xD -Resource70=IDD_CONNECT (Unknown language: 0xD -Resource71=IDD_CONNECT (Unknown language: 0xD -Resource72=IDD_CONNECT (Unknown language: 0xD -Resource73=IDD_CONNECT (Unknown language: 0xD -Resource74=IDD_CONNECT (Unknown language: 0xD -Resource75=IDD_CONNECT (Unknown language: 0xD -Resource76=IDD_CONNECT (Unknown language: 0xD -Resource77=IDD_CONNECT (Unknown language: 0xD -Resource78=IDD_CONNECT (Unknown language: 0xD -Resource79=IDD_CONNECT (Unknown language: 0xD -Resource80=IDD_CONNECT (Unknown language: 0xD -Resource81=IDD_CONNECT (Unknown language: 0xD -Resource82=IDD_CONNECT (Unknown language: 0xD -Resource83=IDD_CONNECT (Unknown language: 0xD -Resource84=IDD_CONNECT (Unknown language: 0xD -Resource85=IDD_CONNECT (Unknown language: 0xD -Resource86=IDD_CONNECT (Unknown language: 0xD -Resource87=IDD_CONNECT (Unknown language: 0xD -Resource88=IDD_CONNECT (Unknown language: 0xD -Resource89=IDD_CONNECT (Unknown language: 0xD -Resource90=IDD_CONNECT (Unknown language: 0xD -Resource91=IDD_CONNECT (Unknown language: 0xD -Resource92=IDD_CONNECT (Unknown language: 0xD -Resource93=IDD_CONNECT (Unknown language: 0xD -Resource94=IDD_CONNECT (Unknown language: 0xD -Resource95=IDD_CONNECT (Unknown language: 0xD -Resource96=IDD_CONNECT (Unknown language: 0xD -Resource97=IDD_CONNECT (Unknown language: 0xD -Resource98=IDD_CONNECT (Unknown language: 0xD -Resource99=IDD_CONNECT (Unknown language: 0xD -Resource100=IDD_CONNECT (Unknown language: 0xD -Resource101=IDD_CONNECT (Unknown language: 0xD -Resource102=IDD_CONNECT (Unknown language: 0xD -Resource103=IDD_CONNECT (Unknown language: 0xD -Resource104=IDD_CONNECT (Unknown language: 0xD -Resource105=IDD_CONNECT (Unknown language: 0xD -Resource106=IDD_CONNECT (Unknown language: 0xD -Resource107=IDD_CONNECT (Unknown language: 0xD -Resource108=IDD_CONNECT (Unknown language: 0xD -Resource109=IDD_CONNECT (Unknown language: 0xD -Resource110=IDD_CONNECT (Unknown language: 0xD -Resource111=IDD_CONNECT (Unknown language: 0xD -Resource112=IDD_CONNECT (Unknown language: 0xD -Resource113=IDD_CONNECT (Unknown language: 0xD -Resource114=IDD_CONNECT (Unknown language: 0xD -Resource115=IDD_CONNECT (Unknown language: 0xD -Resource116=IDD_CONNECT (Unknown language: 0xD -Resource117=IDD_CONNECT (Unknown language: 0xD -Resource118=IDD_CONNECT (Unknown language: 0xD -Resource119=IDD_CONNECT (Unknown language: 0xD -Resource120=IDD_CONNECT (Unknown language: 0xD -Resource121=IDD_CONNECT (Unknown language: 0xD -Resource122=IDD_CONNECT (Unknown language: 0xD -Resource123=IDD_CONNECT (Unknown language: 0xD -Resource124=IDD_CONNECT (Unknown language: 0xD -Resource125=IDD_CONNECT (Unknown language: 0xD -Resource126=IDD_CONNECT (Unknown language: 0xD -Resource127=IDD_CONNECT (Unknown language: 0xD -Resource128=IDD_CONNECT (Unknown language: 0xD -Resource129=IDD_CONNECT (Unknown language: 0xD -Resource130=IDD_CONNECT (Unknown language: 0xD -Resource131=IDD_CONNECT (Unknown language: 0xD -Resource132=IDD_CONNECT (Unknown language: 0xD -Resource133=IDD_CONNECT (Unknown language: 0xD -Resource134=IDD_CONNECT (Unknown language: 0xD -Resource135=IDD_CONNECT (Unknown language: 0xD -Resource136=IDD_CONNECT (Unknown language: 0xD -Resource137=IDD_CONNECT (Unknown language: 0xD -Resource138=IDD_CONNECT (Unknown language: 0xD -Resource139=IDD_CONNECT (Unknown language: 0xD -Resource140=IDD_CONNECT (Unknown language: 0xD -Resource141=IDD_CONNECT (Unknown language: 0xD -Resource142=IDD_CONNECT (Unknown language: 0xD -Resource143=IDD_CONNECT (Unknown language: 0xD -Resource144=IDD_CONNECT (Unknown language: 0xD -Resource145=IDD_CONNECT (Unknown language: 0xD -Resource146=IDD_CONNECT (Unknown language: 0xD -Resource147=IDD_CONNECT (Unknown language: 0xD -Resource148=IDD_CONNECT (Unknown language: 0xD -Resource149=IDD_CONNECT (Unknown language: 0xD -Resource150=IDD_CONNECT (Unknown language: 0xD -Resource151=IDD_CONNECT (Unknown language: 0xD -Resource152=IDD_CONNECT (Unknown language: 0xD -Resource153=IDD_CONNECT (Unknown language: 0xD -Resource154=IDD_CONNECT (Unknown language: 0xD -Resource155=IDD_CONNECT (Unknown language: 0xD -Resource156=IDD_CONNECT (Unknown language: 0xD -Resource157=IDD_CONNECT (Unknown language: 0xD -Resource158=IDD_CONNECT (Unknown language: 0xD -Resource159=IDD_CONNECT (Unknown language: 0xD -Resource160=IDD_CONNECT (Unknown language: 0xD -Resource161=IDD_CONNECT (Unknown language: 0xD -Resource162=IDD_CONNECT (Unknown language: 0xD -Resource163=IDD_CONNECT (Unknown language: 0xD -Resource164=IDD_CONNECT (Unknown language: 0xD -Resource165=IDD_CONNECT (Unknown language: 0xD -Resource166=IDD_CONNECT (Unknown language: 0xD -Resource167=IDD_CONNECT (Unknown language: 0xD -Resource168=IDD_CONNECT (Unknown language: 0xD -Resource169=IDD_CONNECT (Unknown language: 0xD -Resource170=IDD_CONNECT (Unknown language: 0xD -Resource171=IDD_CONNECT (Unknown language: 0xD -Resource172=IDD_CONNECT (Unknown language: 0xD -Resource173=IDD_CONNECT (Unknown language: 0xD -Resource174=IDD_CONNECT (Unknown language: 0xD -Resource175=IDD_CONNECT (Unknown language: 0xD -Resource176=IDD_CONNECT (Unknown language: 0xD -Resource177=IDD_CONNECT (Unknown language: 0xD -Resource178=IDD_CONNECT (Unknown language: 0xD -Resource179=IDD_CONNECT (Unknown language: 0xD -Resource180=IDD_CONNECT (Unknown language: 0xD -Resource181=IDD_CONNECT (Unknown language: 0xD -Resource182=IDD_CONNECT (Unknown language: 0xD -Resource183=IDD_CONNECT (Unknown language: 0xD -Resource184=IDD_CONNECT (Unknown language: 0xD -Resource185=IDD_CONNECT (Unknown language: 0xD -Resource186=IDD_CONNECT (Unknown language: 0xD -Resource187=IDD_CONNECT (Unknown language: 0xD -Resource188=IDD_CONNECT (Unknown language: 0xD -Resource189=IDD_CONNECT (Unknown language: 0xD -Resource190=IDD_CONNECT (Unknown language: 0xD -Resource191=IDD_CONNECT (Unknown language: 0xD -Resource192=IDD_CONNECT (Unknown language: 0xD -Resource193=IDD_CONNECT (Unknown language: 0xD -Resource194=IDD_CONNECT (Unknown language: 0xD -Resource195=IDD_CONNECT (Unknown language: 0xD -Resource196=IDD_CONNECT (Unknown language: 0xD -Resource197=IDD_CONNECT (Unknown language: 0xD -Resource198=IDD_CONNECT (Unknown language: 0xD -Resource199=IDD_CONNECT (Unknown language: 0xD -Resource200=IDD_CONNECT (Unknown language: 0xD -Resource201=IDD_CONNECT (Unknown language: 0xD -Resource202=IDD_CONNECT (Unknown language: 0xD -Resource203=IDD_CONNECT (Unknown language: 0xD -Resource204=IDD_CONNECT (Unknown language: 0xD -Resource205=IDD_CONNECT (Unknown language: 0xD -Resource206=IDD_CONNECT (Unknown language: 0xD -Resource207=IDD_CONNECT (Unknown language: 0xD -Resource208=IDD_CONNECT (Unknown language: 0xD -Resource209=IDD_CONNECT (Unknown language: 0xD -Resource210=IDD_CONNECT (Unknown language: 0xD -Resource211=IDD_CONNECT (Unknown language: 0xD -Resource212=IDD_CONNECT (Unknown language: 0xD -Resource213=IDD_CONNECT (Unknown language: 0xD -Resource214=IDD_CONNECT (Unknown language: 0xD -Resource215=IDD_CONNECT (Unknown language: 0xD -Resource216=IDD_CONNECT (Unknown language: 0xD -Resource217=IDD_CONNECT (Unknown language: 0xD -Resource218=IDD_CONNECT (Unknown language: 0xD -Resource219=IDD_CONNECT (Unknown language: 0xD -Resource220=IDD_CONNECT (Unknown language: 0xD -Resource221=IDD_CONNECT (Unknown language: 0xD -Resource222=IDD_CONNECT (Unknown language: 0xD -Resource223=IDD_CONNECT (Unknown language: 0xD -Resource224=IDD_CONNECT (Unknown language: 0xD -Resource225=IDD_CONNECT (Unknown language: 0xD -Resource226=IDD_CONNECT (Unknown language: 0xD -Resource227=IDD_CONNECT (Unknown language: 0xD -Resource228=IDD_CONNECT (Unknown language: 0xD -Resource229=IDD_CONNECT (Unknown language: 0xD -Resource230=IDD_CONNECT (Unknown language: 0xD -Resource231=IDD_CONNECT (Unknown language: 0xD -Resource232=IDD_CONNECT (Unknown language: 0xD -Resource233=IDD_CONNECT (Unknown language: 0xD -Resource234=IDD_CONNECT (Unknown language: 0xD -Resource235=IDD_CONNECT (Unknown language: 0xD -Resource236=IDD_CONNECT (Unknown language: 0xD -Resource237=IDD_CONNECT (Unknown language: 0xD -Resource238=IDD_CONNECT (Unknown language: 0xD -Resource239=IDD_CONNECT (Unknown language: 0xD -Resource240=IDD_CONNECT (Unknown language: 0xD -Resource241=IDD_CONNECT (Unknown language: 0xD -Resource242=IDD_CONNECT (Unknown language: 0xD -Resource243=IDD_CONNECT (Unknown language: 0xD -Resource244=IDD_CONNECT (Unknown language: 0xD -Resource245=IDD_CONNECT (Unknown language: 0xD -Resource246=IDD_CONNECT (Unknown language: 0xD -Resource247=IDD_CONNECT (Unknown language: 0xD -Resource248=IDD_CONNECT (Unknown language: 0xD -Resource249=IDD_CONNECT (Unknown language: 0xD -Resource250=IDD_CONNECT (Unknown language: 0xD -Resource251=IDD_CONNECT (Unknown language: 0xD -Resource252=IDD_CONNECT (Unknown language: 0xD -Resource253=IDD_CONNECT (Unknown language: 0xD -Resource254=IDD_CONNECT (Unknown language: 0xD -Resource255=IDD_CONNECT (Unknown language: 0xD -Resource256=IDD_CONNECT (Unknown language: 0xD -Resource257=IDD_CONNECT (Unknown language: 0xD -Resource258=IDD_CONNECT (Unknown language: 0xD -Resource259=IDD_CONNECT (Unknown language: 0xD -Resource260=IDD_CONNECT (Unknown language: 0xD -Resource261=IDD_CONNECT (Unknown language: 0xD -Resource262=IDD_CONNECT (Unknown language: 0xD -Resource263=IDD_CONNECT (Unknown language: 0xD -Resource264=IDD_CONNECT (Unknown language: 0xD -Resource265=IDD_CONNECT (Unknown language: 0xD -Resource266=IDD_CONNECT (Unknown language: 0xD -Resource267=IDD_CONNECT (Unknown language: 0xD -Resource268=IDD_CONNECT (Unknown language: 0xD -Resource269=IDD_CONNECT (Unknown language: 0xD -Resource270=IDD_CONNECT (Unknown language: 0xD -Resource271=IDD_CONNECT (Unknown language: 0xD -Resource272=IDD_CONNECT (Unknown language: 0xD -Resource273=IDD_CONNECT (Unknown language: 0xD -Resource274=IDD_CONNECT (Unknown language: 0xD -Resource275=IDD_CONNECT (Unknown language: 0xD -Resource276=IDD_CONNECT (Unknown language: 0xD -Resource277=IDD_CONNECT (Unknown language: 0xD -Resource278=IDD_CONNECT (Unknown language: 0xD -Resource279=IDD_CONNECT (Unknown language: 0xD -Resource280=IDD_CONNECT (Unknown language: 0xD -Resource281=IDD_CONNECT (Unknown language: 0xD -Resource282=IDD_CONNECT (Unknown language: 0xD -Resource283=IDD_CONNECT (Unknown language: 0xD -Resource284=IDD_CONNECT (Unknown language: 0xD -Resource285=IDD_CONNECT (Unknown language: 0xD -Resource286=IDD_CONNECT (Unknown language: 0xD -Resource287=IDD_CONNECT (Unknown language: 0xD -Resource288=IDD_CONNECT (Unknown language: 0xD -Resource289=IDD_CONNECT (Unknown language: 0xD -Resource290=IDD_CONNECT (Unknown language: 0xD -Resource291=IDD_CONNECT (Unknown language: 0xD -Resource292=IDD_CONNECT (Unknown language: 0xD -Resource293=IDD_CONNECT (Unknown language: 0xD -Resource294=IDD_CONNECT (Unknown language: 0xD -Resource295=IDD_CONNECT (Unknown language: 0xD -Resource296=IDD_CONNECT (Unknown language: 0xD -Resource297=IDD_CONNECT (Unknown language: 0xD -Resource298=IDD_CONNECT (Unknown language: 0xD -Resource299=IDD_CONNECT (Unknown language: 0xD -Resource300=IDD_CONNECT (Unknown language: 0xD -Resource301=IDD_CONNECT (Unknown language: 0xD -Resource302=IDD_CONNECT (Unknown language: 0xD -Resource303=IDD_CONNECT (Unknown language: 0xD -Resource304=IDD_CONNECT (Unknown language: 0xD -Resource305=IDD_CONNECT (Unknown language: 0xD -Resource306=IDD_CONNECT (Unknown language: 0xD -Resource307=IDD_CONNECT (Unknown language: 0xD -Resource308=IDD_CONNECT (Unknown language: 0xD -Resource309=IDD_CONNECT (Unknown language: 0xD -Resource310=IDD_CONNECT (Unknown language: 0xD -Resource311=IDD_CONNECT (Unknown language: 0xD -Resource312=IDD_CONNECT (Unknown language: 0xD -Resource313=IDD_CONNECT (Unknown language: 0xD -Resource314=IDD_CONNECT (Unknown language: 0xD -Resource315=IDD_CONNECT (Unknown language: 0xD -Resource316=IDD_CONNECT (Unknown language: 0xD -Resource317=IDD_CONNECT (Unknown language: 0xD -Resource318=IDD_CONNECT (Unknown language: 0xD -Resource319=IDD_CONNECT (Unknown language: 0xD -Resource320=IDD_CONNECT (Unknown language: 0xD -Resource321=IDD_CONNECT (Unknown language: 0xD -Resource322=IDD_CONNECT (Unknown language: 0xD -Resource323=IDD_CONNECT (Unknown language: 0xD -Resource324=IDD_CONNECT (Unknown language: 0xD -Resource325=IDD_CONNECT (Unknown language: 0xD -Resource326=IDD_CONNECT (Unknown language: 0xD -Resource327=IDD_CONNECT (Unknown language: 0xD -Resource328=IDD_CONNECT (Unknown language: 0xD -Resource329=IDD_CONNECT (Unknown language: 0xD -Resource330=IDD_CONNECT (Unknown language: 0xD -Resource331=IDD_CONNECT (Unknown language: 0xD -Resource332=IDD_CONNECT (Unknown language: 0xD -Resource333=IDD_CONNECT (Unknown language: 0xD -Resource334=IDD_CONNECT (Unknown language: 0xD -Resource335=IDD_CONNECT (Unknown language: 0xD -Resource336=IDD_CONNECT (Unknown language: 0xD -Resource337=IDD_CONNECT (Unknown language: 0xD -Resource338=IDD_CONNECT (Unknown language: 0xD -Resource339=IDD_CONNECT (Unknown language: 0xD -Resource340=IDD_CONNECT (Unknown language: 0xD -Resource341=IDD_CONNECT (Unknown language: 0xD -Resource342=IDD_CONNECT (Unknown language: 0xD -Resource343=IDD_CONNECT (Unknown language: 0xD -Resource344=IDD_CONNECT (Unknown language: 0xD -Resource345=IDD_CONNECT (Unknown language: 0xD -Resource346=IDD_CONNECT (Unknown language: 0xD -Resource347=IDD_CONNECT (Unknown language: 0xD -Resource348=IDD_CONNECT (Unknown language: 0xD -Resource349=IDD_CONNECT (Unknown language: 0xD -Resource350=IDD_CONNECT (Unknown language: 0xD -Resource351=IDD_CONNECT (Unknown language: 0xD -Resource352=IDD_CONNECT (Unknown language: 0xD -Resource353=IDD_CONNECT (Unknown language: 0xD -Resource354=IDD_CONNECT (Unknown language: 0xD -Resource355=IDD_CONNECT (Unknown language: 0xD -Resource356=IDD_CONNECT (Unknown language: 0xD -Resource357=IDD_CONNECT (Unknown language: 0xD -Resource358=IDD_CONNECT (Unknown language: 0xD -Resource359=IDD_CONNECT (Unknown language: 0xD -Resource360=IDD_CONNECT (Unknown language: 0xD -Resource361=IDD_CONNECT (Unknown language: 0xD -Resource362=IDD_CONNECT (Unknown language: 0xD -Resource363=IDD_CONNECT (Unknown language: 0xD -Resource364=IDD_CONNECT (Unknown language: 0xD -Resource365=IDD_CONNECT (Unknown language: 0xD -Resource366=IDD_CONNECT (Unknown language: 0xD -Resource367=IDD_CONNECT (Unknown language: 0xD -Resource368=IDD_CONNECT (Unknown language: 0xD -Resource369=IDD_CONNECT (Unknown language: 0xD -Resource370=IDD_CONNECT (Unknown language: 0xD -Resource371=IDD_CONNECT (Unknown language: 0xD -Resource372=IDD_CONNECT (Unknown language: 0xD -Resource373=IDD_CONNECT (Unknown language: 0xD -Resource374=IDD_CONNECT (Unknown language: 0xD -Resource375=IDD_CONNECT (Unknown language: 0xD -Resource376=IDD_CONNECT (Unknown language: 0xD -Resource377=IDD_CONNECT (Unknown language: 0xD -Resource378=IDD_CONNECT (Unknown language: 0xD -Resource379=IDD_CONNECT (Unknown language: 0xD -Resource380=IDD_CONNECT (Unknown language: 0xD -Resource381=IDD_CONNECT (Unknown language: 0xD -Resource382=IDD_CONNECT (Unknown language: 0xD -Resource383=IDD_CONNECT (Unknown language: 0xD -Resource384=IDD_CONNECT (Unknown language: 0xD -Resource385=IDD_CONNECT (Unknown language: 0xD -Resource386=IDD_CONNECT (Unknown language: 0xD -Resource387=IDD_CONNECT (Unknown language: 0xD -Resource388=IDD_CONNECT (Unknown language: 0xD -Resource389=IDD_CONNECT (Unknown language: 0xD -Resource390=IDD_CONNECT (Unknown language: 0xD -Resource391=IDD_CONNECT (Unknown language: 0xD -Resource392=IDD_CONNECT (Unknown language: 0xD -Resource393=IDD_CONNECT (Unknown language: 0xD -Resource394=IDD_CONNECT (Unknown language: 0xD -Resource395=IDD_CONNECT (Unknown language: 0xD -Resource396=IDD_CONNECT (Unknown language: 0xD -Resource397=IDD_CONNECT (Unknown language: 0xD -Resource398=IDD_CONNECT (Unknown language: 0xD -Resource399=IDD_CONNECT (Unknown language: 0xD -Resource400=IDD_CONNECT (Unknown language: 0xD -Resource401=IDD_CONNECT (Unknown language: 0xD -Resource402=IDD_CONNECT (Unknown language: 0xD -Resource403=IDD_CONNECT (Unknown language: 0xD -Resource404=IDD_CONNECT (Unknown language: 0xD -Resource405=IDD_CONNECT (Unknown language: 0xD -Resource406=IDD_CONNECT (Unknown language: 0xD -Resource407=IDD_CONNECT (Unknown language: 0xD -Resource408=IDD_CONNECT (Unknown language: 0xD -Resource409=IDD_CONNECT (Unknown language: 0xD -Resource410=IDD_CONNECT (Unknown language: 0xD -Resource411=IDD_CONNECT (Unknown language: 0xD -Resource412=IDD_CONNECT (Unknown language: 0xD -Resource413=IDD_CONNECT (Unknown language: 0xD -Resource414=IDD_CONNECT (Unknown language: 0xD -Resource415=IDD_CONNECT (Unknown language: 0xD -Resource416=IDD_CONNECT (Unknown language: 0xD -Resource417=IDD_CONNECT (Unknown language: 0xD -Resource418=IDD_CONNECT (Unknown language: 0xD -Resource419=IDD_CONNECT (Unknown language: 0xD -Resource420=IDD_CONNECT (Unknown language: 0xD -Resource421=IDD_CONNECT (Unknown language: 0xD -Resource422=IDD_CONNECT (Unknown language: 0xD -Resource423=IDD_CONNECT (Unknown language: 0xD -Resource424=IDD_CONNECT (Unknown language: 0xD -Resource425=IDD_CONNECT (Unknown language: 0xD -Resource426=IDD_CONNECT (Unknown language: 0xD -Resource427=IDD_CONNECT (Unknown language: 0xD -Resource428=IDD_CONNECT (Unknown language: 0xD -Resource429=IDD_CONNECT (Unknown language: 0xD -Resource430=IDD_CONNECT (Unknown language: 0xD -Resource431=IDD_CONNECT (Unknown language: 0xD -Resource432=IDD_CONNECT (Unknown language: 0xD -Resource433=IDD_CONNECT (Unknown language: 0xD -Resource434=IDD_CONNECT (Unknown language: 0xD -Resource435=IDD_CONNECT (Unknown language: 0xD -Resource436=IDD_CONNECT (Unknown language: 0xD -Resource437=IDD_CONNECT (Unknown language: 0xD -Resource438=IDD_CONNECT (Unknown language: 0xD -Resource439=IDD_CONNECT (Unknown language: 0xD -Resource440=IDD_CONNECT (Unknown language: 0xD -Resource441=IDD_CONNECT (Unknown language: 0xD -Resource442=IDD_CONNECT (Unknown language: 0xD -Resource443=IDD_CONNECT (Unknown language: 0xD -Resource444=IDD_CONNECT (Unknown language: 0xD -Resource445=IDD_CONNECT (Unknown language: 0xD -Resource446=IDD_CONNECT (Unknown language: 0xD -Resource447=IDD_CONNECT (Unknown language: 0xD -Resource448=IDD_CONNECT (Unknown language: 0xD -Resource449=IDD_CONNECT (Unknown language: 0xD -Resource450=IDD_CONNECT (Unknown language: 0xD -Resource451=IDD_CONNECT (Unknown language: 0xD -Resource452=IDD_CONNECT (Unknown language: 0xD -Resource453=IDD_CONNECT (Unknown language: 0xD -Resource454=IDD_CONNECT (Unknown language: 0xD -Resource455=IDD_CONNECT (Unknown language: 0xD -Resource456=IDD_CONNECT (Unknown language: 0xD -Resource457=IDD_CONNECT (Unknown language: 0xD -Resource458=IDD_CONNECT (Unknown language: 0xD -Resource459=IDD_CONNECT (Unknown language: 0xD -Resource460=IDD_CONNECT (Unknown language: 0xD -Resource461=IDD_CONNECT (Unknown language: 0xD -Resource462=IDD_CONNECT (Unknown language: 0xD -Resource463=IDD_CONNECT (Unknown language: 0xD -Resource464=IDD_CONNECT (Unknown language: 0xD -Resource465=IDD_CONNECT (Unknown language: 0xD -Resource466=IDD_CONNECT (Unknown language: 0xD -Resource467=IDD_CONNECT (Unknown language: 0xD -Resource468=IDD_CONNECT (Unknown language: 0xD -Resource469=IDD_CONNECT (Unknown language: 0xD -Resource470=IDD_CONNECT (Unknown language: 0xD -Resource471=IDD_CONNECT (Unknown language: 0xD -Resource472=IDD_CONNECT (Unknown language: 0xD -Resource473=IDD_CONNECT (Unknown language: 0xD -Resource474=IDD_CONNECT (Unknown language: 0xD -Resource475=IDD_CONNECT (Unknown language: 0xD -Resource476=IDD_CONNECT (Unknown language: 0xD -Resource477=IDD_CONNECT (Unknown language: 0xD -Resource478=IDD_CONNECT (Unknown language: 0xD -Resource479=IDD_CONNECT (Unknown language: 0xD -Resource480=IDD_CONNECT (Unknown language: 0xD -Resource481=IDD_CONNECT (Unknown language: 0xD -Resource482=IDD_CONNECT (Unknown language: 0xD -Resource483=IDD_CONNECT (Unknown language: 0xD -Resource484=IDD_CONNECT (Unknown language: 0xD -Resource485=IDD_CONNECT (Unknown language: 0xD -Resource486=IDD_CONNECT (Unknown language: 0xD -Resource487=IDD_CONNECT (Unknown language: 0xD -Resource488=IDD_CONNECT (Unknown language: 0xD -Resource489=IDD_CONNECT (Unknown language: 0xD -Resource490=IDD_CONNECT (Unknown language: 0xD -Resource491=IDD_CONNECT (Unknown language: 0xD -Resource492=IDD_CONNECT (Unknown language: 0xD -Resource493=IDD_CONNECT (Unknown language: 0xD -Resource494=IDD_CONNECT (Unknown language: 0xD -Resource495=IDD_CONNECT (Unknown language: 0xD -Resource496=IDD_CONNECT (Unknown language: 0xD -Resource497=IDD_CONNECT (Unknown language: 0xD -Resource498=IDD_CONNECT (Unknown language: 0xD -Resource499=IDD_CONNECT (Unknown language: 0xD -Resource500=IDD_CONNECT (Unknown language: 0xD -Resource501=IDD_CONNECT (Unknown language: 0xD -Resource502=IDD_CONNECT (Unknown language: 0xD -Resource503=IDD_CONNECT (Unknown language: 0xD -Resource504=IDD_CONNECT (Unknown language: 0xD -Resource505=IDD_CONNECT (Unknown language: 0xD -Resource506=IDD_CONNECT (Unknown language: 0xD -Resource507=IDD_CONNECT (Unknown language: 0xD -Resource508=IDD_CONNECT (Unknown language: 0xD -Resource509=IDD_CONNECT (Unknown language: 0xD -Resource510=IDD_CONNECT (Unknown language: 0xD -Resource511=IDD_CONNECT (Unknown language: 0xD -Resource512=IDD_CONNECT (Unknown language: 0xD -Resource513=IDD_CONNECT (Unknown language: 0xD -Resource514=IDD_CONNECT (Unknown language: 0xD -Resource515=IDD_CONNECT (Unknown language: 0xD -Resource516=IDD_CONNECT (Unknown language: 0xD -Resource517=IDD_CONNECT (Unknown language: 0xD -Resource518=IDD_CONNECT (Unknown language: 0xD -Resource519=IDD_CONNECT (Unknown language: 0xD -Resource520=IDD_CONNECT (Unknown language: 0xD -Resource521=IDD_CONNECT (Unknown language: 0xD -Resource522=IDD_CONNECT (Unknown language: 0xD -Resource523=IDD_CONNECT (Unknown language: 0xD -Resource524=IDD_CONNECT (Unknown language: 0xD -Resource525=IDD_CONNECT (Unknown language: 0xD -Resource526=IDD_CONNECT (Unknown language: 0xD -Resource527=IDD_CONNECT (Unknown language: 0xD -Resource528=IDD_CONNECT (Unknown language: 0xD -Resource529=IDD_CONNECT (Unknown language: 0xD -Resource530=IDD_CONNECT (Unknown language: 0xD -Resource531=IDD_CONNECT (Unknown language: 0xD -Resource532=IDD_CONNECT (Unknown language: 0xD -Resource533=IDD_CONNECT (Unknown language: 0xD -Resource534=IDD_CONNECT (Unknown language: 0xD -Resource535=IDD_CONNECT (Unknown language: 0xD -Resource536=IDD_CONNECT (Unknown language: 0xD -Resource537=IDD_CONNECT (Unknown language: 0xD -Resource538=IDD_CONNECT (Unknown language: 0xD -Resource539=IDD_CONNECT (Unknown language: 0xD -Resource540=IDD_CONNECT (Unknown language: 0xD -Resource541=IDD_CONNECT (Unknown language: 0xD -Resource542=IDD_CONNECT (Unknown language: 0xD -Resource543=IDD_CONNECT (Unknown language: 0xD -Resource544=IDD_CONNECT (Unknown language: 0xD -Resource545=IDD_CONNECT (Unknown language: 0xD -Resource546=IDD_CONNECT (Unknown language: 0xD -Resource547=IDD_CONNECT (Unknown language: 0xD -Resource548=IDD_CONNECT (Unknown language: 0xD -Resource549=IDD_CONNECT (Unknown language: 0xD -Resource550=IDD_CONNECT (Unknown language: 0xD -Resource551=IDD_CONNECT (Unknown language: 0xD -Resource552=IDD_CONNECT (Unknown language: 0xD -Resource553=IDD_CONNECT (Unknown language: 0xD -Resource554=IDD_CONNECT (Unknown language: 0xD -Resource555=IDD_CONNECT (Unknown language: 0xD -Resource556=IDD_CONNECT (Unknown language: 0xD -Resource557=IDD_CONNECT (Unknown language: 0xD -Resource558=IDD_CONNECT (Unknown language: 0xD -Resource559=IDD_CONNECT (Unknown language: 0xD -Resource560=IDD_CONNECT (Unknown language: 0xD -Resource561=IDD_CONNECT (Unknown language: 0xD -Resource562=IDD_CONNECT (Unknown language: 0xD -Resource563=IDD_CONNECT (Unknown language: 0xD -Resource564=IDD_CONNECT (Unknown language: 0xD -Resource565=IDD_CONNECT (Unknown language: 0xD -Resource566=IDD_CONNECT (Unknown language: 0xD -Resource567=IDD_CONNECT (Unknown language: 0xD -Resource568=IDD_CONNECT (Unknown language: 0xD -Resource569=IDD_CONNECT (Unknown language: 0xD -Resource570=IDD_CONNECT (Unknown language: 0xD -Resource571=IDD_CONNECT (Unknown language: 0xD -Resource572=IDD_CONNECT (Unknown language: 0xD -Resource573=IDD_CONNECT (Unknown language: 0xD -Resource574=IDD_CONNECT (Unknown language: 0xD -Resource575=IDD_CONNECT (Unknown language: 0xD -Resource576=IDD_CONNECT (Unknown language: 0xD -Resource577=IDD_CONNECT (Unknown language: 0xD -Resource578=IDD_CONNECT (Unknown language: 0xD -Resource579=IDD_CONNECT (Unknown language: 0xD -Resource580=IDD_CONNECT (Unknown language: 0xD -Resource581=IDD_CONNECT (Unknown language: 0xD -Resource582=IDD_CONNECT (Unknown language: 0xD -Resource583=IDD_CONNECT (Unknown language: 0xD -Resource584=IDD_CONNECT (Unknown language: 0xD -Resource585=IDD_CONNECT (Unknown language: 0xD -Resource586=IDD_CONNECT (Unknown language: 0xD -Resource587=IDD_CONNECT (Unknown language: 0xD -Resource588=IDD_CONNECT (Unknown language: 0xD -Resource589=IDD_CONNECT (Unknown language: 0xD -Resource590=IDD_CONNECT (Unknown language: 0xD -Resource591=IDD_CONNECT (Unknown language: 0xD -Resource592=IDD_CONNECT (Unknown language: 0xD -Resource593=IDD_CONNECT (Unknown language: 0xD -Resource594=IDD_CONNECT (Unknown language: 0xD -Resource595=IDD_CONNECT (Unknown language: 0xD -Resource596=IDD_CONNECT (Unknown language: 0xD -Resource597=IDD_CONNECT (Unknown language: 0xD -Resource598=IDD_CONNECT (Unknown language: 0xD -Resource599=IDD_CONNECT (Unknown language: 0xD -Resource600=IDD_CONNECT (Unknown language: 0xD -Resource601=IDD_CONNECT (Unknown language: 0xD -Resource602=IDD_CONNECT (Unknown language: 0xD -Resource603=IDD_CONNECT (Unknown language: 0xD -Resource604=IDD_CONNECT (Unknown language: 0xD -Resource605=IDD_CONNECT (Unknown language: 0xD -Resource606=IDD_CONNECT (Unknown language: 0xD -Resource607=IDD_CONNECT (Unknown language: 0xD -Resource608=IDD_CONNECT (Unknown language: 0xD -Resource609=IDD_CONNECT (Unknown language: 0xD -Resource610=IDD_CONNECT (Unknown language: 0xD -Resource611=IDD_CONNECT (Unknown language: 0xD -Resource612=IDD_CONNECT (Unknown language: 0xD -Resource613=IDD_CONNECT (Unknown language: 0xD -Resource614=IDD_CONNECT (Unknown language: 0xD -Resource615=IDD_CONNECT (Unknown language: 0xD -Resource616=IDD_CONNECT (Unknown language: 0xD -Resource617=IDD_CONNECT (Unknown language: 0xD -Resource618=IDD_CONNECT (Unknown language: 0xD -Resource619=IDD_CONNECT (Unknown language: 0xD -Resource620=IDD_CONNECT (Unknown language: 0xD -Resource621=IDD_CONNECT (Unknown language: 0xD -Resource622=IDD_CONNECT (Unknown language: 0xD -Resource623=IDD_CONNECT (Unknown language: 0xD -Resource624=IDD_CONNECT (Unknown language: 0xD -Resource625=IDD_CONNECT (Unknown language: 0xD -Resource626=IDD_CONNECT (Unknown language: 0xD -Resource627=IDD_CONNECT (Unknown language: 0xD -Resource628=IDD_CONNECT (Unknown language: 0xD -Resource629=IDD_CONNECT (Unknown language: 0xD -Resource630=IDD_CONNECT (Unknown language: 0xD -Resource631=IDD_CONNECT (Unknown language: 0xD -Resource632=IDD_CONNECT (Unknown language: 0xD -Resource633=IDD_CONNECT (Unknown language: 0xD -Resource634=IDD_CONNECT (Unknown language: 0xD -Resource635=IDD_CONNECT (Unknown language: 0xD -Resource636=IDD_CONNECT (Unknown language: 0xD -Resource637=IDD_CONNECT (Unknown language: 0xD -Resource638=IDD_CONNECT (Unknown language: 0xD -Resource639=IDD_CONNECT (Unknown language: 0xD -Resource640=IDD_CONNECT (Unknown language: 0xD -Resource641=IDD_CONNECT (Unknown language: 0xD -Resource642=IDD_CONNECT (Unknown language: 0xD -Resource643=IDD_CONNECT (Unknown language: 0xD -Resource644=IDD_CONNECT (Unknown language: 0xD -Resource645=IDD_CONNECT (Unknown language: 0xD -Resource646=IDD_CONNECT (Unknown language: 0xD -Resource647=IDD_CONNECT (Unknown language: 0xD -Resource648=IDD_CONNECT (Unknown language: 0xD -Resource649=IDD_CONNECT (Unknown language: 0xD -Resource650=IDD_CONNECT (Unknown language: 0xD -Resource651=IDD_CONNECT (Unknown language: 0xD -Resource652=IDD_CONNECT (Unknown language: 0xD -Resource653=IDD_CONNECT (Unknown language: 0xD -Resource654=IDD_CONNECT (Unknown language: 0xD -Resource655=IDD_CONNECT (Unknown language: 0xD -Resource656=IDD_CONNECT (Unknown language: 0xD -Resource657=IDD_CONNECT (Unknown language: 0xD -Resource658=IDD_CONNECT (Unknown language: 0xD -Resource659=IDD_CONNECT (Unknown language: 0xD -Resource660=IDD_CONNECT (Unknown language: 0xD -Resource661=IDD_CONNECT (Unknown language: 0xD -Resource662=IDD_CONNECT (Unknown language: 0xD -Resource663=IDD_CONNECT (Unknown language: 0xD -Resource664=IDD_CONNECT (Unknown language: 0xD -Resource665=IDD_CONNECT (Unknown language: 0xD -Resource666=IDD_CONNECT (Unknown language: 0xD -Resource667=IDD_CONNECT (Unknown language: 0xD -Resource668=IDD_CONNECT (Unknown language: 0xD -Resource669=IDD_CONNECT (Unknown language: 0xD -Resource670=IDD_CONNECT (Unknown language: 0xD -Resource671=IDD_CONNECT (Unknown language: 0xD -Resource672=IDD_CONNECT (Unknown language: 0xD -Resource673=IDD_CONNECT (Unknown language: 0xD -Resource674=IDD_CONNECT (Unknown language: 0xD -Resource675=IDD_CONNECT (Unknown language: 0xD -Resource676=IDD_CONNECT (Unknown language: 0xD -Resource677=IDD_CONNECT (Unknown language: 0xD -Resource678=IDD_CONNECT (Unknown language: 0xD -Resource679=IDD_CONNECT (Unknown language: 0xD -Resource680=IDD_CONNECT (Unknown language: 0xD -Resource681=IDD_CONNECT (Unknown language: 0xD -Resource682=IDD_CONNECT (Unknown language: 0xD -Resource683=IDD_CONNECT (Unknown language: 0xD -Resource684=IDD_CONNECT (Unknown language: 0xD -Resource685=IDD_CONNECT (Unknown language: 0xD -Resource686=IDD_CONNECT (Unknown language: 0xD -Resource687=IDD_CONNECT (Unknown language: 0xD -Resource688=IDD_CONNECT (Unknown language: 0xD -Resource689=IDD_CONNECT (Unknown language: 0xD -Resource690=IDD_CONNECT (Unknown language: 0xD -Resource691=IDD_CONNECT (Unknown language: 0xD -Resource692=IDD_CONNECT (Unknown language: 0xD -Resource693=IDD_CONNECT (Unknown language: 0xD -Resource694=IDD_CONNECT (Unknown language: 0xD -Resource695=IDD_CONNECT (Unknown language: 0xD -Resource696=IDD_CONNECT (Unknown language: 0xD -Resource697=IDD_CONNECT (Unknown language: 0xD -Resource698=IDD_CONNECT (Unknown language: 0xD -Resource699=IDD_CONNECT (Unknown language: 0xD -Resource700=IDD_CONNECT (Unknown language: 0xD -Resource701=IDD_CONNECT (Unknown language: 0xD -Resource702=IDD_CONNECT (Unknown language: 0xD -Resource703=IDD_CONNECT (Unknown language: 0xD -Resource704=IDD_CONNECT (Unknown language: 0xD -Resource705=IDD_CONNECT (Unknown language: 0xD -Resource706=IDD_CONNECT (Unknown language: 0xD -Resource707=IDD_CONNECT (Unknown language: 0xD -Resource708=IDD_CONNECT (Unknown language: 0xD -Resource709=IDD_CONNECT (Unknown language: 0xD -Resource710=IDD_CONNECT (Unknown language: 0xD -Resource711=IDD_CONNECT (Unknown language: 0xD -Resource712=IDD_CONNECT (Unknown language: 0xD -Resource713=IDD_CONNECT (Unknown language: 0xD -Resource714=IDD_CONNECT (Unknown language: 0xD -Resource715=IDD_CONNECT (Unknown language: 0xD -Resource716=IDD_CONNECT (Unknown language: 0xD -Resource717=IDD_CONNECT (Unknown language: 0xD -Resource718=IDD_CONNECT (Unknown language: 0xD -Resource719=IDD_CONNECT (Unknown language: 0xD -Resource720=IDD_CONNECT (Unknown language: 0xD -Resource721=IDD_CONNECT (Unknown language: 0xD -Resource722=IDD_CONNECT (Unknown language: 0xD -Resource723=IDD_CONNECT (Unknown language: 0xD -Resource724=IDD_CONNECT (Unknown language: 0xD -Resource725=IDD_CONNECT (Unknown language: 0xD -Resource726=IDD_CONNECT (Unknown language: 0xD -Resource727=IDD_CONNECT (Unknown language: 0xD -Resource728=IDD_CONNECT (Unknown language: 0xD -Resource729=IDD_CONNECT (Unknown language: 0xD -Resource730=IDD_CONNECT (Unknown language: 0xD -Resource731=IDD_CONNECT (Unknown language: 0xD -Resource732=IDD_CONNECT (Unknown language: 0xD -Resource733=IDD_CONNECT (Unknown language: 0xD -Resource734=IDD_CONNECT (Unknown language: 0xD -Resource735=IDD_CONNECT (Unknown language: 0xD -Resource736=IDD_CONNECT (Unknown language: 0xD -Resource737=IDD_CONNECT (Unknown language: 0xD -Resource738=IDD_CONNECT (Unknown language: 0xD -Resource739=IDD_CONNECT (Unknown language: 0xD -Resource740=IDD_CONNECT (Unknown language: 0xD -Resource741=IDD_CONNECT (Unknown language: 0xD -Resource742=IDD_CONNECT (Unknown language: 0xD -Resource743=IDD_CONNECT (Unknown language: 0xD -Resource744=IDD_CONNECT (Unknown language: 0xD -Resource745=IDD_CONNECT (Unknown language: 0xD -Resource746=IDD_CONNECT (Unknown language: 0xD -Resource747=IDD_CONNECT (Unknown language: 0xD -Resource748=IDD_CONNECT (Unknown language: 0xD -Resource749=IDD_CONNECT (Unknown language: 0xD -Resource750=IDD_CONNECT (Unknown language: 0xD -Resource751=IDD_CONNECT (Unknown language: 0xD -Resource752=IDD_CONNECT (Unknown language: 0xD -Resource753=IDD_CONNECT (Unknown language: 0xD -Resource754=IDD_CONNECT (Unknown language: 0xD -Resource755=IDD_CONNECT (Unknown language: 0xD -Resource756=IDD_CONNECT (Unknown language: 0xD -Resource757=IDD_CONNECT (Unknown language: 0xD -Resource758=IDD_CONNECT (Unknown language: 0xD -Resource759=IDD_CONNECT (Unknown language: 0xD -Resource760=IDD_CONNECT (Unknown language: 0xD -Resource761=IDD_CONNECT (Unknown language: 0xD -Resource762=IDD_CONNECT (Unknown language: 0xD -Resource763=IDD_CONNECT (Unknown language: 0xD -Resource764=IDD_CONNECT (Unknown language: 0xD -Resource765=IDD_CONNECT (Unknown language: 0xD -Resource766=IDD_CONNECT (Unknown language: 0xD -Resource767=IDD_CONNECT (Unknown language: 0xD -Resource768=IDD_CONNECT (Unknown language: 0xD -Resource769=IDD_CONNECT (Unknown language: 0xD -Resource770=IDD_CONNECT (Unknown language: 0xD -Resource771=IDD_CONNECT (Unknown language: 0xD -Resource772=IDD_CONNECT (Unknown language: 0xD -Resource773=IDD_CONNECT (Unknown language: 0xD -Resource774=IDD_CONNECT (Unknown language: 0xD -Resource775=IDD_CONNECT (Unknown language: 0xD -Resource776=IDD_CONNECT (Unknown language: 0xD -Resource777=IDD_CONNECT (Unknown language: 0xD -Resource778=IDD_CONNECT (Unknown language: 0xD -Resource779=IDD_CONNECT (Unknown language: 0xD -Resource780=IDD_CONNECT (Unknown language: 0xD -Resource781=IDD_CONNECT (Unknown language: 0xD -Resource782=IDD_CONNECT (Unknown language: 0xD -Resource783=IDD_CONNECT (Unknown language: 0xD -Resource784=IDD_CONNECT (Unknown language: 0xD -Resource785=IDD_CONNECT (Unknown language: 0xD -Resource786=IDD_CONNECT (Unknown language: 0xD -Resource787=IDD_CONNECT (Unknown language: 0xD -Resource788=IDD_CONNECT (Unknown language: 0xD -Resource789=IDD_CONNECT (Unknown language: 0xD -Resource790=IDD_CONNECT (Unknown language: 0xD -Resource791=IDD_CONNECT (Unknown language: 0xD -Resource792=IDD_CONNECT (Unknown language: 0xD -Resource793=IDD_CONNECT (Unknown language: 0xD -Resource794=IDD_CONNECT (Unknown language: 0xD -Resource795=IDD_CONNECT (Unknown language: 0xD -Resource796=IDD_CONNECT (Unknown language: 0xD -Resource797=IDD_CONNECT (Unknown language: 0xD -Resource798=IDD_CONNECT (Unknown language: 0xD -Resource799=IDD_CONNECT (Unknown language: 0xD -Resource800=IDD_CONNECT (Unknown language: 0xD -Resource801=IDD_CONNECT (Unknown language: 0xD -Resource802=IDD_CONNECT (Unknown language: 0xD -Resource803=IDD_CONNECT (Unknown language: 0xD -Resource804=IDD_CONNECT (Unknown language: 0xD -Resource805=IDD_CONNECT (Unknown language: 0xD -Resource806=IDD_CONNECT (Unknown language: 0xD -Resource807=IDD_CONNECT (Unknown language: 0xD -Resource808=IDD_CONNECT (Unknown language: 0xD -Resource809=IDD_CONNECT (Unknown language: 0xD -Resource810=IDD_CONNECT (Unknown language: 0xD -Resource811=IDD_CONNECT (Unknown language: 0xD -Resource812=IDD_CONNECT (Unknown language: 0xD -Resource813=IDD_CONNECT (Unknown language: 0xD -Resource814=IDD_CONNECT (Unknown language: 0xD -Resource815=IDD_CONNECT (Unknown language: 0xD -Resource816=IDD_CONNECT (Unknown language: 0xD -Resource817=IDD_CONNECT (Unknown language: 0xD -Resource818=IDD_CONNECT (Unknown language: 0xD -Resource819=IDD_CONNECT (Unknown language: 0xD -Resource820=IDD_CONNECT (Unknown language: 0xD -Resource821=IDD_CONNECT (Unknown language: 0xD -Resource822=IDD_CONNECT (Unknown language: 0xD -Resource823=IDD_CONNECT (Unknown language: 0xD -Resource824=IDD_CONNECT (Unknown language: 0xD -Resource825=IDD_CONNECT (Unknown language: 0xD -Resource826=IDD_CONNECT (Unknown language: 0xD -Resource827=IDD_CONNECT (Unknown language: 0xD -Resource828=IDD_CONNECT (Unknown language: 0xD -Resource829=IDD_CONNECT (Unknown language: 0xD -Resource830=IDD_CONNECT (Unknown language: 0xD -Resource831=IDD_CONNECT (Unknown language: 0xD -Resource832=IDD_CONNECT (Unknown language: 0xD -Resource833=IDD_CONNECT (Unknown language: 0xD -Resource834=IDD_CONNECT (Unknown language: 0xD -Resource835=IDD_CONNECT (Unknown language: 0xD -Resource836=IDD_CONNECT (Unknown language: 0xD -Resource837=IDD_CONNECT (Unknown language: 0xD -Resource838=IDD_CONNECT (Unknown language: 0xD -Resource839=IDD_CONNECT (Unknown language: 0xD -Resource840=IDD_CONNECT (Unknown language: 0xD -Resource841=IDD_CONNECT (Unknown language: 0xD -Resource842=IDD_CONNECT (Unknown language: 0xD -Resource843=IDD_CONNECT (Unknown language: 0xD -Resource844=IDD_CONNECT (Unknown language: 0xD -Resource845=IDD_CONNECT (Unknown language: 0xD -Resource846=IDD_CONNECT (Unknown language: 0xD -Resource847=IDD_CONNECT (Unknown language: 0xD -Resource848=IDD_CONNECT (Unknown language: 0xD -Resource849=IDD_CONNECT (Unknown language: 0xD -Resource850=IDD_CONNECT (Unknown language: 0xD -Resource851=IDD_CONNECT (Unknown language: 0xD -Resource852=IDD_CONNECT (Unknown language: 0xD -Resource853=IDD_CONNECT (Unknown language: 0xD -Resource854=IDD_CONNECT (Unknown language: 0xD -Resource855=IDD_CONNECT (Unknown language: 0xD -Resource856=IDD_CONNECT (Unknown language: 0xD -Resource857=IDD_CONNECT (Unknown language: 0xD -Resource858=IDD_CONNECT (Unknown language: 0xD -Resource859=IDD_CONNECT (Unknown language: 0xD -Resource860=IDD_CONNECT (Unknown language: 0xD -Resource861=IDD_CONNECT (Unknown language: 0xD -Resource862=IDD_CONNECT (Unknown language: 0xD -Resource863=IDD_CONNECT (Unknown language: 0xD -Resource864=IDD_CONNECT (Unknown language: 0xD -Resource865=IDD_CONNECT (Unknown language: 0xD -Resource866=IDD_CONNECT (Unknown language: 0xD -Resource867=IDD_CONNECT (Unknown language: 0xD -Resource868=IDD_CONNECT (Unknown language: 0xD -Resource869=IDD_CONNECT (Unknown language: 0xD -Resource870=IDD_CONNECT (Unknown language: 0xD -Resource871=IDD_CONNECT (Unknown language: 0xD -Resource872=IDD_CONNECT (Unknown language: 0xD -Resource873=IDD_CONNECT (Unknown language: 0xD -Resource874=IDD_CONNECT (Unknown language: 0xD -Resource875=IDD_CONNECT (Unknown language: 0xD -Resource876=IDD_CONNECT (Unknown language: 0xD -Resource877=IDD_CONNECT (Unknown language: 0xD -Resource878=IDD_CONNECT (Unknown language: 0xD -Resource879=IDD_CONNECT (Unknown language: 0xD -Resource880=IDD_CONNECT (Unknown language: 0xD -Resource881=IDD_CONNECT (Unknown language: 0xD -Resource882=IDD_CONNECT (Unknown language: 0xD -Resource883=IDD_CONNECT (Unknown language: 0xD -Resource884=IDD_CONNECT (Unknown language: 0xD -Resource885=IDD_CONNECT (Unknown language: 0xD -Resource886=IDD_CONNECT (Unknown language: 0xD -Resource887=IDD_CONNECT (Unknown language: 0xD -Resource888=IDD_CONNECT (Unknown language: 0xD -Resource889=IDD_CONNECT (Unknown language: 0xD -Resource890=IDD_CONNECT (Unknown language: 0xD -Resource891=IDD_CONNECT (Unknown language: 0xD -Resource892=IDD_CONNECT (Unknown language: 0xD -Resource893=IDD_CONNECT (Unknown language: 0xD -Resource894=IDD_CONNECT (Unknown language: 0xD -Resource895=IDD_CONNECT (Unknown language: 0xD -Resource896=IDD_CONNECT (Unknown language: 0xD -Resource897=IDD_CONNECT (Unknown language: 0xD -Resource898=IDD_CONNECT (Unknown language: 0xD -Resource899=IDD_CONNECT (Unknown language: 0xD -Resource900=IDD_CONNECT (Unknown language: 0xD -Resource901=IDD_CONNECT (Unknown language: 0xD -Resource902=IDD_CONNECT (Unknown language: 0xD -Resource903=IDD_CONNECT (Unknown language: 0xD -Resource904=IDD_CONNECT (Unknown language: 0xD -Resource905=IDD_CONNECT (Unknown language: 0xD -Resource906=IDD_CONNECT (Unknown language: 0xD -Resource907=IDD_CONNECT (Unknown language: 0xD -Resource908=IDD_CONNECT (Unknown language: 0xD -Resource909=IDD_CONNECT (Unknown language: 0xD -Resource910=IDD_CONNECT (Unknown language: 0xD -Resource911=IDD_CONNECT (Unknown language: 0xD -Resource912=IDD_CONNECT (Unknown language: 0xD -Resource913=IDD_CONNECT (Unknown language: 0xD -Resource914=IDD_CONNECT (Unknown language: 0xD -Resource915=IDD_CONNECT (Unknown language: 0xD -Resource916=IDD_CONNECT (Unknown language: 0xD -Resource917=IDD_CONNECT (Unknown language: 0xD -Resource918=IDD_CONNECT (Unknown language: 0xD -Resource919=IDD_CONNECT (Unknown language: 0xD -Resource920=IDD_CONNECT (Unknown language: 0xD -Resource921=IDD_CONNECT (Unknown language: 0xD -Resource922=IDD_CONNECT (Unknown language: 0xD -Resource923=IDD_CONNECT (Unknown language: 0xD -Resource924=IDD_CONNECT (Unknown language: 0xD -Resource925=IDD_CONNECT (Unknown language: 0xD -Resource926=IDD_CONNECT (Unknown language: 0xD -Resource927=IDD_CONNECT (Unknown language: 0xD -Resource928=IDD_CONNECT (Unknown language: 0xD -Resource929=IDD_CONNECT (Unknown language: 0xD -Resource930=IDD_CONNECT (Unknown language: 0xD -Resource931=IDD_CONNECT (Unknown language: 0xD -Resource932=IDD_CONNECT (Unknown language: 0xD -Resource933=IDD_CONNECT (Unknown language: 0xD -Resource934=IDD_CONNECT (Unknown language: 0xD -Resource935=IDD_CONNECT (Unknown language: 0xD -Resource936=IDD_CONNECT (Unknown language: 0xD -Resource937=IDD_CONNECT (Unknown language: 0xD -Resource938=IDD_CONNECT (Unknown language: 0xD -Resource939=IDD_CONNECT (Unknown language: 0xD -Resource940=IDD_CONNECT (Unknown language: 0xD -Resource941=IDD_CONNECT (Unknown language: 0xD -Resource942=IDD_CONNECT (Unknown language: 0xD -Resource943=IDD_CONNECT (Unknown language: 0xD -Resource944=IDD_CONNECT (Unknown language: 0xD -Resource945=IDD_CONNECT (Unknown language: 0xD -Resource946=IDD_CONNECT (Unknown language: 0xD -Resource947=IDD_CONNECT (Unknown language: 0xD -Resource948=IDD_CONNECT (Unknown language: 0xD -Resource949=IDD_CONNECT (Unknown language: 0xD -Resource950=IDD_CONNECT (Unknown language: 0xD -Resource951=IDD_CONNECT (Unknown language: 0xD -Resource952=IDD_CONNECT (Unknown language: 0xD -Resource953=IDD_CONNECT (Unknown language: 0xD -Resource954=IDD_CONNECT (Unknown language: 0xD -Resource955=IDD_CONNECT (Unknown language: 0xD -Resource956=IDD_CONNECT (Unknown language: 0xD -Resource957=IDD_CONNECT (Unknown language: 0xD -Resource958=IDD_CONNECT (Unknown language: 0xD -Resource959=IDD_CONNECT (Unknown language: 0xD -Resource960=IDD_CONNECT (Unknown language: 0xD -Resource961=IDD_CONNECT (Unknown language: 0xD -Resource962=IDD_CONNECT (Unknown language: 0xD -Resource963=IDD_CONNECT (Unknown language: 0xD -Resource964=IDD_CONNECT (Unknown language: 0xD -Resource965=IDD_CONNECT (Unknown language: 0xD -Resource966=IDD_CONNECT (Unknown language: 0xD -Resource967=IDD_CONNECT (Unknown language: 0xD -Resource968=IDD_CONNECT (Unknown language: 0xD -Resource969=IDD_CONNECT (Unknown language: 0xD -Resource970=IDD_CONNECT (Unknown language: 0xD -Resource971=IDD_CONNECT (Unknown language: 0xD -Resource972=IDD_CONNECT (Unknown language: 0xD -Resource973=IDD_CONNECT (Unknown language: 0xD -Resource974=IDD_CONNECT (Unknown language: 0xD -Resource975=IDD_CONNECT (Unknown language: 0xD -Resource976=IDD_CONNECT (Unknown language: 0xD -Resource977=IDD_CONNECT (Unknown language: 0xD -Resource978=IDD_CONNECT (Unknown language: 0xD -Resource979=IDD_CONNECT (Unknown language: 0xD -Resource980=IDD_CONNECT (Unknown language: 0xD -Resource981=IDD_CONNECT (Unknown language: 0xD -Resource982=IDD_CONNECT (Unknown language: 0xD -Resource983=IDD_CONNECT (Unknown language: 0xD -Resource984=IDD_CONNECT (Unknown language: 0xD -Resource985=IDD_CONNECT (Unknown language: 0xD -Resource986=IDD_CONNECT (Unknown language: 0xD -Resource987=IDD_CONNECT (Unknown language: 0xD -Resource988=IDD_CONNECT (Unknown language: 0xD -Resource989=IDD_CONNECT (Unknown language: 0xD -Resource990=IDD_CONNECT (Unknown language: 0xD -Resource991=IDD_CONNECT (Unknown language: 0xD -Resource992=IDD_CONNECT (Unknown language: 0xD -Resource993=IDD_CONNECT (Unknown language: 0xD -Resource994=IDD_CONNECT (Unknown language: 0xD -Resource995=IDD_CONNECT (Unknown language: 0xD -Resource996=IDD_CONNECT (Unknown language: 0xD -Resource997=IDD_CONNECT (Unknown language: 0xD -Resource998=IDD_CONNECT (Unknown language: 0xD -Resource999=IDD_CONNECT (Unknown language: 0xD -Resource1000=IDD_CONNECT (Unknown language: 0xD -Resource1001=IDD_CONNECT (Unknown language: 0xD -Resource1002=IDD_CONNECT (Unknown language: 0xD -Resource1003=IDD_CONNECT (Unknown language: 0xD -Resource1004=IDD_CONNECT (Unknown language: 0xD -Resource1005=IDD_CONNECT (Unknown language: 0xD -Resource1006=IDD_CONNECT (Unknown language: 0xD -Resource1007=IDD_CONNECT (Unknown language: 0xD -Resource1008=IDD_CONNECT (Unknown language: 0xD -Resource1009=IDD_CONNECT (Unknown language: 0xD -Resource1010=IDD_CONNECT (Unknown language: 0xD -Resource1011=IDD_CONNECT (Unknown language: 0xD -Resource1012=IDD_CONNECT (Unknown language: 0xD -Resource1013=IDD_CONNECT (Unknown language: 0xD -Resource1014=IDD_CONNECT (Unknown language: 0xD -Resource1015=IDD_CONNECT (Unknown language: 0xD -Resource1016=IDD_CONNECT (Unknown language: 0xD -Resource1017=IDD_CONNECT (Unknown language: 0xD -Resource1018=IDD_CONNECT (Unknown language: 0xD -Resource1019=IDD_CONNECT (Unknown language: 0xD -Resource1020=IDD_CONNECT (Unknown language: 0xD -Resource1021=IDD_CONNECT (Unknown language: 0xD -Resource1022=IDD_CONNECT (Unknown language: 0xD -Resource1023=IDD_CONNECT (Unknown language: 0xD -Resource1024=IDD_CONNECT (Unknown language: 0xD -Resource1025=IDD_CONNECT (Unknown language: 0xD -Resource1026=IDD_CONNECT (Unknown language: 0xD -Resource1027=IDD_CONNECT (Unknown language: 0xD -Resource1028=IDD_CONNECT (Unknown language: 0xD -Resource1029=IDD_CONNECT (Unknown language: 0xD -Resource1030=IDD_CONNECT (Unknown language: 0xD -Resource1031=IDD_CONNECT (Unknown language: 0xD -Resource1032=IDD_CONNECT (Unknown language: 0xD -Resource1033=IDD_CONNECT (Unknown language: 0xD -Resource1034=IDD_CONNECT (Unknown language: 0xD -Resource1035=IDD_CONNECT (Unknown language: 0xD -Resource1036=IDD_CONNECT (Unknown language: 0xD -Resource1037=IDD_CONNECT (Unknown language: 0xD -Resource1038=IDD_CONNECT (Unknown language: 0xD -Resource1039=IDD_CONNECT (Unknown language: 0xD -Resource1040=IDD_CONNECT (Unknown language: 0xD -Resource1041=IDD_CONNECT (Unknown language: 0xD -Resource1042=IDD_CONNECT (Unknown language: 0xD -Resource1043=IDD_CONNECT (Unknown language: 0xD -Resource1044=IDD_CONNECT (Unknown language: 0xD -Resource1045=IDD_CONNECT (Unknown language: 0xD -Resource1046=IDD_CONNECT (Unknown language: 0xD -Resource1047=IDD_CONNECT (Unknown language: 0xD -Resource1048=IDD_CONNECT (Unknown language: 0xD -Resource1049=IDD_CONNECT (Unknown language: 0xD -Resource1050=IDD_CONNECT (Unknown language: 0xD -Resource1051=IDD_CONNECT (Unknown language: 0xD -Resource1052=IDD_CONNECT (Unknown language: 0xD -Resource1053=IDD_CONNECT (Unknown language: 0xD -Resource1054=IDD_CONNECT (Unknown language: 0xD -Resource1055=IDD_CONNECT (Unknown language: 0xD -Resource1056=IDD_CONNECT (Unknown language: 0xD -Resource1057=IDD_CONNECT (Unknown language: 0xD -Resource1058=IDD_CONNECT (Unknown language: 0xD -Resource1059=IDD_CONNECT (Unknown language: 0xD -Resource1060=IDD_CONNECT (Unknown language: 0xD -Resource1061=IDD_CONNECT (Unknown language: 0xD -Resource1062=IDD_CONNECT (Unknown language: 0xD -Resource1063=IDD_CONNECT (Unknown language: 0xD -Resource1064=IDD_CONNECT (Unknown language: 0xD -Resource1065=IDD_CONNECT (Unknown language: 0xD -Resource1066=IDD_CONNECT (Unknown language: 0xD -Resource1067=IDD_CONNECT (Unknown language: 0xD -Resource1068=IDD_CONNECT (Unknown language: 0xD -Resource1069=IDD_CONNECT (Unknown language: 0xD -Resource1070=IDD_CONNECT (Unknown language: 0xD -Resource1071=IDD_CONNECT (Unknown language: 0xD -Resource1072=IDD_CONNECT (Unknown language: 0xD -Resource1073=IDD_CONNECT (Unknown language: 0xD -Resource1074=IDD_CONNECT (Unknown language: 0xD -Resource1075=IDD_CONNECT (Unknown language: 0xD -Resource1076=IDD_CONNECT (Unknown language: 0xD -Resource1077=IDD_CONNECT (Unknown language: 0xD -Resource1078=IDD_CONNECT (Unknown language: 0xD -Resource1079=IDD_CONNECT (Unknown language: 0xD -Resource1080=IDD_CONNECT (Unknown language: 0xD -Resource1081=IDD_CONNECT (Unknown language: 0xD -Resource1082=IDD_CONNECT (Unknown language: 0xD -Resource1083=IDD_CONNECT (Unknown language: 0xD -Resource1084=IDD_CONNECT (Unknown language: 0xD -Resource1085=IDD_CONNECT (Unknown language: 0xD -Resource1086=IDD_CONNECT (Unknown language: 0xD -Resource1087=IDD_CONNECT (Unknown language: 0xD -Resource1088=IDD_CONNECT (Unknown language: 0xD -Resource1089=IDD_CONNECT (Unknown language: 0xD -Resource1090=IDD_CONNECT (Unknown language: 0xD -Resource1091=IDD_CONNECT (Unknown language: 0xD -Resource1092=IDD_CONNECT (Unknown language: 0xD -Resource1093=IDD_CONNECT (Unknown language: 0xD -Resource1094=IDD_CONNECT (Unknown language: 0xD -Resource1095=IDD_CONNECT (Unknown language: 0xD -Resource1096=IDD_CONNECT (Unknown language: 0xD -Resource1097=IDD_CONNECT (Unknown language: 0xD -Resource1098=IDD_CONNECT (Unknown language: 0xD -Resource1099=IDD_CONNECT (Unknown language: 0xD -Resource1100=IDD_CONNECT (Unknown language: 0xD -Resource1101=IDD_CONNECT (Unknown language: 0xD -Resource1102=IDD_CONNECT (Unknown language: 0xD -Resource1103=IDD_CONNECT (Unknown language: 0xD -Resource1104=IDD_CONNECT (Unknown language: 0xD -Resource1105=IDD_CONNECT (Unknown language: 0xD -Resource1106=IDD_CONNECT (Unknown language: 0xD -Resource1107=IDD_CONNECT (Unknown language: 0xD -Resource1108=IDD_CONNECT (Unknown language: 0xD -Resource1109=IDD_CONNECT (Unknown language: 0xD -Resource1110=IDD_CONNECT (Unknown language: 0xD -Resource1111=IDD_CONNECT (Unknown language: 0xD -Resource1112=IDD_CONNECT (Unknown language: 0xD -Resource1113=IDD_CONNECT (Unknown language: 0xD -Resource1114=IDD_CONNECT (Unknown language: 0xD -Resource1115=IDD_CONNECT (Unknown language: 0xD -Resource1116=IDD_CONNECT (Unknown language: 0xD -Resource1117=IDD_CONNECT (Unknown language: 0xD -Resource1118=IDD_CONNECT (Unknown language: 0xD -Resource1119=IDD_CONNECT (Unknown language: 0xD -Resource1120=IDD_CONNECT (Unknown language: 0xD -Resource1121=IDD_CONNECT (Unknown language: 0xD -Resource1122=IDD_CONNECT (Unknown language: 0xD -Resource1123=IDD_CONNECT (Unknown language: 0xD -Resource1124=IDD_CONNECT (Unknown language: 0xD -Resource1125=IDD_CONNECT (Unknown language: 0xD -Resource1126=IDD_CONNECT (Unknown language: 0xD -Resource1127=IDD_CONNECT (Unknown language: 0xD -Resource1128=IDD_CONNECT (Unknown language: 0xD -Resource1129=IDD_CONNECT (Unknown language: 0xD -Resource1130=IDD_CONNECT (Unknown language: 0xD -Resource1131=IDD_CONNECT (Unknown language: 0xD -Resource1132=IDD_CONNECT (Unknown language: 0xD -Resource1133=IDD_CONNECT (Unknown language: 0xD -Resource1134=IDD_CONNECT (Unknown language: 0xD -Resource1135=IDD_CONNECT (Unknown language: 0xD -Resource1136=IDD_CONNECT (Unknown language: 0xD -Resource1137=IDD_CONNECT (Unknown language: 0xD -Resource1138=IDD_CONNECT (Unknown language: 0xD -Resource1139=IDD_CONNECT (Unknown language: 0xD -Resource1140=IDD_CONNECT (Unknown language: 0xD -Resource1141=IDD_CONNECT (Unknown language: 0xD -Resource1142=IDD_CONNECT (Unknown language: 0xD -Resource1143=IDD_CONNECT (Unknown language: 0xD -Resource1144=IDD_CONNECT (Unknown language: 0xD -Resource1145=IDD_CONNECT (Unknown language: 0xD -Resource1146=IDD_CONNECT (Unknown language: 0xD -Resource1147=IDD_CONNECT (Unknown language: 0xD -Resource1148=IDD_CONNECT (Unknown language: 0xD -Resource1149=IDD_CONNECT (Unknown language: 0xD -Resource1150=IDD_CONNECT (Unknown language: 0xD -Resource1151=IDD_CONNECT (Unknown language: 0xD -Resource1152=IDD_CONNECT (Unknown language: 0xD -Resource1153=IDD_CONNECT (Unknown language: 0xD -Resource1154=IDD_CONNECT (Unknown language: 0xD -Resource1155=IDD_CONNECT (Unknown language: 0xD -Resource1156=IDD_CONNECT (Unknown language: 0xD -Resource1157=IDD_CONNECT (Unknown language: 0xD -Resource1158=IDD_CONNECT (Unknown language: 0xD -Resource1159=IDD_CONNECT (Unknown language: 0xD -Resource1160=IDD_CONNECT (Unknown language: 0xD -Resource1161=IDD_CONNECT (Unknown language: 0xD -Resource1162=IDD_CONNECT (Unknown language: 0xD -Resource1163=IDD_CONNECT (Unknown language: 0xD -Resource1164=IDD_CONNECT (Unknown language: 0xD -Resource1165=IDD_CONNECT (Unknown language: 0xD -Resource1166=IDD_CONNECT (Unknown language: 0xD -Resource1167=IDD_CONNECT (Unknown language: 0xD -Resource1168=IDD_CONNECT (Unknown language: 0xD -Resource1169=IDD_CONNECT (Unknown language: 0xD -Resource1170=IDD_CONNECT (Unknown language: 0xD -Resource1171=IDD_CONNECT (Unknown language: 0xD -Resource1172=IDD_CONNECT (Unknown language: 0xD -Resource1173=IDD_CONNECT (Unknown language: 0xD -Resource1174=IDD_CONNECT (Unknown language: 0xD -Resource1175=IDD_CONNECT (Unknown language: 0xD -Resource1176=IDD_CONNECT (Unknown language: 0xD -Resource1177=IDD_CONNECT (Unknown language: 0xD -Resource1178=IDD_CONNECT (Unknown language: 0xD -Resource1179=IDD_CONNECT (Unknown language: 0xD -Resource1180=IDD_CONNECT (Unknown language: 0xD -Resource1181=IDD_CONNECT (Unknown language: 0xD -Resource1182=IDD_CONNECT (Unknown language: 0xD -Resource1183=IDD_CONNECT (Unknown language: 0xD -Resource1184=IDD_CONNECT (Unknown language: 0xD -Resource1185=IDD_CONNECT (Unknown language: 0xD -Resource1186=IDD_CONNECT (Unknown language: 0xD -Resource1187=IDD_CONNECT (Unknown language: 0xD -Resource1188=IDD_CONNECT (Unknown language: 0xD -Resource1189=IDD_CONNECT (Unknown language: 0xD -Resource1190=IDD_CONNECT (Unknown language: 0xD -Resource1191=IDD_CONNECT (Unknown language: 0xD -Resource1192=IDD_CONNECT (Unknown language: 0xD -Resource1193=IDD_CONNECT (Unknown language: 0xD -Resource1194=IDD_CONNECT (Unknown language: 0xD -Resource1195=IDD_CONNECT (Unknown language: 0xD -Resource1196=IDD_CONNECT (Unknown language: 0xD -Resource1197=IDD_CONNECT (Unknown language: 0xD -Resource1198=IDD_CONNECT (Unknown language: 0xD -Resource1199=IDD_CONNECT (Unknown language: 0xD -Resource1200=IDD_CONNECT (Unknown language: 0xD -Resource1201=IDD_CONNECT (Unknown language: 0xD -Resource1202=IDD_CONNECT (Unknown language: 0xD -Resource1203=IDD_CONNECT (Unknown language: 0xD -Resource1204=IDD_CONNECT (Unknown language: 0xD -Resource1205=IDD_CONNECT (Unknown language: 0xD -Resource1206=IDD_CONNECT (Unknown language: 0xD -Resource1207=IDD_CONNECT (Unknown language: 0xD -Resource1208=IDD_CONNECT (Unknown language: 0xD -Resource1209=IDD_CONNECT (Unknown language: 0xD -Resource1210=IDD_CONNECT (Unknown language: 0xD -Resource1211=IDD_CONNECT (Unknown language: 0xD -Resource1212=IDD_CONNECT (Unknown language: 0xD -Resource1213=IDD_CONNECT (Unknown language: 0xD -Resource1214=IDD_CONNECT (Unknown language: 0xD -Resource1215=IDD_CONNECT (Unknown language: 0xD -Resource1216=IDD_CONNECT (Unknown language: 0xD -Resource1217=IDD_CONNECT (Unknown language: 0xD -Resource1218=IDD_CONNECT (Unknown language: 0xD -Resource1219=IDD_CONNECT (Unknown language: 0xD -Resource1220=IDD_CONNECT (Unknown language: 0xD -Resource1221=IDD_CONNECT (Unknown language: 0xD -Resource1222=IDD_CONNECT (Unknown language: 0xD -Resource1223=IDD_CONNECT (Unknown language: 0xD -Resource1224=IDD_CONNECT (Unknown language: 0xD -Resource1225=IDD_CONNECT (Unknown language: 0xD -Resource1226=IDD_CONNECT (Unknown language: 0xD -Resource1227=IDD_CONNECT (Unknown language: 0xD -Resource1228=IDD_CONNECT (Unknown language: 0xD -Resource1229=IDD_CONNECT (Unknown language: 0xD -Resource1230=IDD_CONNECT (Unknown language: 0xD -Resource1231=IDD_CONNECT (Unknown language: 0xD -Resource1232=IDD_CONNECT (Unknown language: 0xD -Resource1233=IDD_CONNECT (Unknown language: 0xD -Resource1234=IDD_CONNECT (Unknown language: 0xD -Resource1235=IDD_CONNECT (Unknown language: 0xD -Resource1236=IDD_CONNECT (Unknown language: 0xD -Resource1237=IDD_CONNECT (Unknown language: 0xD -Resource1238=IDD_CONNECT (Unknown language: 0xD -Resource1239=IDD_CONNECT (Unknown language: 0xD -Resource1240=IDD_CONNECT (Unknown language: 0xD -Resource1241=IDD_CONNECT (Unknown language: 0xD -Resource1242=IDD_CONNECT (Unknown language: 0xD -Resource1243=IDD_CONNECT (Unknown language: 0xD -Resource1244=IDD_CONNECT (Unknown language: 0xD -Resource1245=IDD_CONNECT (Unknown language: 0xD -Resource1246=IDD_CONNECT (Unknown language: 0xD -Resource1247=IDD_CONNECT (Unknown language: 0xD -Resource1248=IDD_CONNECT (Unknown language: 0xD -Resource1249=IDD_CONNECT (Unknown language: 0xD -Resource1250=IDD_CONNECT (Unknown language: 0xD -Resource1251=IDD_CONNECT (Unknown language: 0xD -Resource1252=IDD_CONNECT (Unknown language: 0xD -Resource1253=IDD_CONNECT (Unknown language: 0xD -Resource1254=IDD_CONNECT (Unknown language: 0xD -Resource1255=IDD_CONNECT (Unknown language: 0xD -Resource1256=IDD_CONNECT (Unknown language: 0xD -Resource1257=IDD_CONNECT (Unknown language: 0xD -Resource1258=IDD_CONNECT (Unknown language: 0xD -Resource1259=IDD_CONNECT (Unknown language: 0xD -Resource1260=IDD_CONNECT (Unknown language: 0xD -Resource1261=IDD_CONNECT (Unknown language: 0xD -Resource1262=IDD_CONNECT (Unknown language: 0xD -Resource1263=IDD_CONNECT (Unknown language: 0xD -Resource1264=IDD_CONNECT (Unknown language: 0xD -Resource1265=IDD_CONNECT (Unknown language: 0xD -Resource1266=IDD_CONNECT (Unknown language: 0xD -Resource1267=IDD_CONNECT (Unknown language: 0xD -Resource1268=IDD_CONNECT (Unknown language: 0xD -Resource1269=IDD_CONNECT (Unknown language: 0xD -Resource1270=IDD_CONNECT (Unknown language: 0xD -Resource1271=IDD_CONNECT (Unknown language: 0xD -Resource1272=IDD_CONNECT (Unknown language: 0xD -Resource1273=IDD_CONNECT (Unknown language: 0xD -Resource1274=IDD_CONNECT (Unknown language: 0xD -Resource1275=IDD_CONNECT (Unknown language: 0xD -Resource1276=IDD_CONNECT (Unknown language: 0xD -Resource1277=IDD_CONNECT (Unknown language: 0xD -Resource1278=IDD_CONNECT (Unknown language: 0xD -Resource1279=IDD_CONNECT (Unknown language: 0xD -Resource1280=IDD_CONNECT (Unknown language: 0xD -Resource1281=IDD_CONNECT (Unknown language: 0xD -Resource1282=IDD_CONNECT (Unknown language: 0xD -Resource1283=IDD_CONNECT (Unknown language: 0xD -Resource1284=IDD_CONNECT (Unknown language: 0xD -Resource1285=IDD_CONNECT (Unknown language: 0xD -Resource1286=IDD_CONNECT (Unknown language: 0xD -Resource1287=IDD_CONNECT (Unknown language: 0xD -Resource1288=IDD_CONNECT (Unknown language: 0xD -Resource1289=IDD_CONNECT (Unknown language: 0xD -Resource1290=IDD_CONNECT (Unknown language: 0xD -Resource1291=IDD_CONNECT (Unknown language: 0xD -Resource1292=IDD_CONNECT (Unknown language: 0xD -Resource1293=IDD_CONNECT (Unknown language: 0xD -Resource1294=IDD_CONNECT (Unknown language: 0xD -Resource1295=IDD_CONNECT (Unknown language: 0xD -Resource1296=IDD_CONNECT (Unknown language: 0xD -Resource1297=IDD_CONNECT (Unknown language: 0xD -Resource1298=IDD_CONNECT (Unknown language: 0xD -Resource1299=IDD_CONNECT (Unknown language: 0xD -Resource1300=IDD_CONNECT (Unknown language: 0xD -Resource1301=IDD_CONNECT (Unknown language: 0xD -Resource1302=IDD_CONNECT (Unknown language: 0xD -Resource1303=IDD_CONNECT (Unknown language: 0xD -Resource1304=IDD_CONNECT (Unknown language: 0xD -Resource1305=IDD_CONNECT (Unknown language: 0xD -Resource1306=IDD_CONNECT (Unknown language: 0xD -Resource1307=IDD_CONNECT (Unknown language: 0xD -Resource1308=IDD_CONNECT (Unknown language: 0xD -Resource1309=IDD_CONNECT (Unknown language: 0xD -Resource1310=IDD_CONNECT (Unknown language: 0xD -Resource1311=IDD_CONNECT (Unknown language: 0xD -Resource1312=IDD_CONNECT (Unknown language: 0xD -Resource1313=IDD_CONNECT (Unknown language: 0xD -Resource1314=IDD_CONNECT (Unknown language: 0xD -Resource1315=IDD_CONNECT (Unknown language: 0xD -Resource1316=IDD_CONNECT (Unknown language: 0xD -Resource1317=IDD_CONNECT (Unknown language: 0xD -Resource1318=IDD_CONNECT (Unknown language: 0xD -Resource1319=IDD_CONNECT (Unknown language: 0xD -Resource1320=IDD_CONNECT (Unknown language: 0xD -Resource1321=IDD_CONNECT (Unknown language: 0xD -Resource1322=IDD_CONNECT (Unknown language: 0xD -Resource1323=IDD_CONNECT (Unknown language: 0xD -Resource1324=IDD_CONNECT (Unknown language: 0xD -Resource1325=IDD_CONNECT (Unknown language: 0xD -Resource1326=IDD_CONNECT (Unknown language: 0xD -Resource1327=IDD_CONNECT (Unknown language: 0xD -Resource1328=IDD_CONNECT (Unknown language: 0xD -Resource1329=IDD_CONNECT (Unknown language: 0xD -Resource1330=IDD_CONNECT (Unknown language: 0xD -Resource1331=IDD_CONNECT (Unknown language: 0xD -Resource1332=IDD_CONNECT (Unknown language: 0xD -Resource1333=IDD_CONNECT (Unknown language: 0xD -Resource1334=IDD_ABOUTBOX -Resource1335=IDD_SMLOBBY_DIALOG -Resource1336=IDD_FILEXFER -Resource1337=IDD_CONNECT (Unknown language: 0xD, 0x1) +Resource40=IDD_SMLOBBY_DIALOG +Resource41=IDD_FILEXFER +Resource42=IDD_CONNECT (Unknown language: 0xD, 0x1) + +[CLS:CConnectDlg] +Type=0 +BaseClass=CDialog +HeaderFile=ConnectDlg.h +ImplementationFile=ConnectDlg.cpp + +[CLS:CDirectoryDialog] +Type=0 +BaseClass=CFileDialog +HeaderFile=DirectoryDialog.h +ImplementationFile=DirectoryDialog.cpp + +[CLS:CEditChat] +Type=0 +BaseClass=CEdit +HeaderFile=EditChat.h +ImplementationFile=EditChat.cpp + +[CLS:CSendFileDialog] +Type=0 +BaseClass=CDialog +HeaderFile=SendFileDialog.h +ImplementationFile=SendFileDialog.cpp +Filter=D +VirtualFilter=dWC +LastObject=IDC_XFERSTATUS [CLS:CSmlobbyApp] Type=0 +BaseClass=CWinApp HeaderFile=smlobby.h ImplementationFile=smlobby.cpp -Filter=N + +[CLS:CAboutDlg] +Type=0 +BaseClass=CDialog +HeaderFile=smlobbyDlg.cpp +ImplementationFile=smlobbyDlg.cpp +LastObject=CAboutDlg [CLS:CSmlobbyDlg] Type=0 +BaseClass=CDialog HeaderFile=smlobbyDlg.h ImplementationFile=smlobbyDlg.cpp -Filter=D -BaseClass=CDialog -VirtualFilter=dWC -LastObject=CSmlobbyDlg - - -[DLG:IDD_SMLOBBY_DIALOG] +[DLG:IDD_CONNECT] Type=1 -Class=CSmlobbyDlg -ControlCount=15 -Control1=IDC_EDIT_ENTRY,edit,1350631552 -Control2=IDC_STATIC,button,1342177287 -Control3=IDC_STATIC,button,1342177287 -Control4=IDC_LIST_GAMES,listbox,1352728835 -Control5=IDC_STATIC,button,1342177287 -Control6=IDC_EDIT_GAME_INFO,edit,1350631428 -Control7=IDC_STATIC,button,1342177287 -Control8=IDC_COMBO_MUSIC,combobox,1344340227 -Control9=IDC_STATIC,static,1342308352 -Control10=IDC_BUTTON_CREATE_GAME,button,1342242816 -Control11=IDC_LIST_USERS,listbox,1352728835 -Control12=IDC_EDIT_GAME_NAME,edit,1350631552 -Control13=IDC_STATIC,static,1342308352 -Control14=IDC_BUTTON_BEGIN_GAME,button,1342242816 -Control15=IDC_EDIT_CHAT_MESSAGES,edit,1352728644 - -[DLG:IDD_ABOUTBOX] -Type=1 -Class=? -ControlCount=4 -Control1=IDC_STATIC,static,1342177283 -Control2=IDC_STATIC,static,1342308480 -Control3=IDC_STATIC,static,1342308352 -Control4=IDOK,button,1342373889 +Class=CConnectDlg [DLG:IDD_FILEXFER] Type=1 -Class=? +Class=CSendFileDialog ControlCount=18 Control1=IDCANCEL,button,1342242816 Control2=IDC_STATIC,static,1342308352 @@ -1418,6 +134,36 @@ Control16=IDC_TIMELEFT,static,1342308352 Control17=IDC_XFERRATE,static,1342308352 Control18=IDC_XFERSTATUS,static,1342308352 +[DLG:IDD_ABOUTBOX] +Type=1 +Class=CAboutDlg +ControlCount=4 +Control1=IDC_STATIC,static,1342177283 +Control2=IDC_STATIC,static,1342308480 +Control3=IDC_STATIC,static,1342308352 +Control4=IDOK,button,1342373889 + +[DLG:IDD_SMLOBBY_DIALOG] +Type=1 +Class=CSmlobbyDlg +ControlCount=16 +Control1=IDC_EDIT_ENTRY,edit,1350631552 +Control2=IDC_STATIC,button,1342177287 +Control3=IDC_STATIC,button,1342177287 +Control4=IDC_LIST_GAMES,listbox,1352728835 +Control5=IDC_STATIC,button,1342177287 +Control6=IDC_EDIT_GAME_INFO,edit,1350633476 +Control7=IDC_NEWGAMEFRAME,button,1342177287 +Control8=IDC_COMBO_MUSIC,combobox,1344340227 +Control9=IDC_SELECT_MUSIC_STATIC,static,1342308352 +Control10=IDC_BUTTON_CREATE_GAME,button,1342242816 +Control11=IDC_LIST_USERS,listbox,1352728835 +Control12=IDC_EDIT_GAME_NAME,edit,1350631552 +Control13=IDC_GAME_NAME_STATIC,static,1342308352 +Control14=IDC_BUTTON_BEGIN_GAME,button,1342242816 +Control15=IDC_EDIT_CHAT_MESSAGES,edit,1352728644 +Control16=IDC_REFRESH_GAME_LIST,button,1342242816 + [DLG:IDD_CONNECT (Unknown language: 0xD, 0x1)] Type=1 Class=? diff --git a/stepmania/src/smlobby/smlobby.dsp b/stepmania/src/smlobby/smlobby.dsp index 3e6a348ad3..5afa3e44b6 100644 --- a/stepmania/src/smlobby/smlobby.dsp +++ b/stepmania/src/smlobby/smlobby.dsp @@ -188,6 +188,10 @@ SOURCE=.\res\smlobby.ico # End Source File # Begin Source File +SOURCE=.\smlobby.rc +# End Source File +# Begin Source File + SOURCE=.\res\smlobby.rc2 # End Source File # End Group diff --git a/stepmania/src/smlobby/smlobby.ncb b/stepmania/src/smlobby/smlobby.ncb index 7516b2b4bd..77cb276a7a 100644 Binary files a/stepmania/src/smlobby/smlobby.ncb and b/stepmania/src/smlobby/smlobby.ncb differ diff --git a/stepmania/src/smlobby/smlobby.opt b/stepmania/src/smlobby/smlobby.opt index f0c42f6e5c..15a986f466 100644 Binary files a/stepmania/src/smlobby/smlobby.opt and b/stepmania/src/smlobby/smlobby.opt differ diff --git a/stepmania/src/smlobby/smlobby.plg b/stepmania/src/smlobby/smlobby.plg new file mode 100644 index 0000000000..8e0a203630 --- /dev/null +++ b/stepmania/src/smlobby/smlobby.plg @@ -0,0 +1,42 @@ + + +
+

Build Log

+

+--------------------Configuration: smlobby - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\BRENDA~1\LOCALS~1\Temp\RSP1BA.tmp" with contents +[ +/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\eclipse\workspace\stepmania\src\smlobby\smlobbyDlg.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\BRENDA~1\LOCALS~1\Temp\RSP1BA.tmp" +Creating temporary file "C:\DOCUME~1\BRENDA~1\LOCALS~1\Temp\RSP1BB.tmp" with contents +[ +ws2_32.lib /nologo /subsystem:windows /incremental:yes /pdb:"../../smlobby.pdb" /debug /machine:I386 /out:"../../smlobby.exe" /pdbtype:sept +.\Debug\ConnectDlg.obj +.\Debug\CrossThreadsMessagingDevice.obj +.\Debug\EditChat.obj +.\Debug\irc.obj +.\Debug\RageUtil.obj +.\Debug\SendFileDialog.obj +.\Debug\smlobby.obj +.\Debug\smlobbyDlg.obj +.\Debug\socket.obj +.\Debug\StdAfx.obj +.\Debug\smlobby.res +] +Creating command line "link.exe @C:\DOCUME~1\BRENDA~1\LOCALS~1\Temp\RSP1BB.tmp" +

Output Window

+Compiling... +smlobbyDlg.cpp +Linking... + + + +

Results

+smlobby.exe - 0 error(s), 0 warning(s) +
+ + diff --git a/stepmania/src/smlobby/smlobby.rc b/stepmania/src/smlobby/smlobby.rc index 5f7d6feffa..e2c3297507 100644 --- a/stepmania/src/smlobby/smlobby.rc +++ b/stepmania/src/smlobby/smlobby.rc @@ -92,23 +92,25 @@ FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN EDITTEXT IDC_EDIT_ENTRY,105,281,347,12,ES_AUTOHSCROLL GROUPBOX "Chat",IDC_STATIC,5,140,453,160 - GROUPBOX "Waiting Games",IDC_STATIC,5,5,117,130 - LISTBOX IDC_LIST_GAMES,15,20,100,105,LBS_SORT | + GROUPBOX "Waiting Games",IDC_STATIC,5,22,117,113 + LISTBOX IDC_LIST_GAMES,15,42,100,84,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP GROUPBOX "Game Information",IDC_STATIC,143,5,107,130 - EDITTEXT IDC_EDIT_GAME_INFO,153,20,90,105,ES_MULTILINE - GROUPBOX "Create New Game",IDC_STATIC,271,5,185,130 + EDITTEXT IDC_EDIT_GAME_INFO,153,20,90,105,ES_MULTILINE | + ES_READONLY + GROUPBOX "Create New Game",IDC_NEWGAMEFRAME,271,5,185,130 COMBOBOX IDC_COMBO_MUSIC,278,35,170,88,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "Select Music:",IDC_STATIC,278,25,44,10 + LTEXT "Select Music:",IDC_SELECT_MUSIC_STATIC,278,25,44,10 PUSHBUTTON "Create Game",IDC_BUTTON_CREATE_GAME,338,100,56,20 LISTBOX IDC_LIST_USERS,10,155,85,140,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_EDIT_GAME_NAME,277,70,171,15,ES_AUTOHSCROLL - LTEXT "Game Name:",IDC_STATIC,278,60,87,10 + LTEXT "Game Name:",IDC_GAME_NAME_STATIC,278,60,87,10 PUSHBUTTON "Begin Game",IDC_BUTTON_BEGIN_GAME,213,305,49,20 EDITTEXT IDC_EDIT_CHAT_MESSAGES,105,155,347,120,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL + PUSHBUTTON "Refresh Game List",IDC_REFRESH_GAME_LIST,32,6,63,13 END IDD_FILEXFER DIALOG DISCARDABLE 0, 0, 186, 173 @@ -123,7 +125,7 @@ BEGIN LTEXT "To:",IDC_TOFROM,7,49,33,8 CONTROL "Progress1",IDC_PROGRESS1,"msctls_progress32",WS_BORDER, 7,70,172,13 - LTEXT "Sent:",IDC_SENTRECVD,7,89,21,9 + LTEXT "Sent:",IDC_SENTRECVD,7,89,28,9 LTEXT "Time left:",IDC_STATIC,7,98,33,8 LTEXT "Rate:",IDC_STATIC,7,107,33,8 LTEXT "Status:",IDC_STATIC,7,117,33,8 diff --git a/stepmania/src/smlobby/smlobbyDlg.cpp b/stepmania/src/smlobby/smlobbyDlg.cpp index c25a7c031a..41ec3b0535 100644 --- a/stepmania/src/smlobby/smlobbyDlg.cpp +++ b/stepmania/src/smlobby/smlobbyDlg.cpp @@ -14,7 +14,8 @@ static char THIS_FILE[] = __FILE__; #include "ConnectDlg.h" - +#include "SendFileDialog.h" +#include ///////////////////////////////////////////////////////////////////////////// // global objects @@ -22,7 +23,7 @@ static const NetworkInit g_wsInit; static const unsigned short FILE_XFER_RATE = 4096; irc::CIrcSession g_ircSession; -irc::CIrcDCCServer g_DCCServer; +//irc::CIrcDCCServer g_DCCServer; ///////////////////////////////////////////////////////////////////////////// @@ -80,12 +81,20 @@ CSmlobbyDlg::CSmlobbyDlg(CWnd* pParent /*=NULL*/) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + + //We aren't trying to join any games just yet + m_bWantToJoin = false; } void CSmlobbyDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSmlobbyDlg) + DDX_Control(pDX, IDC_BUTTON_BEGIN_GAME, m_buttonStartGame); + DDX_Control(pDX, IDC_GAME_NAME_STATIC, m_staticGameName); + DDX_Control(pDX, IDC_SELECT_MUSIC_STATIC, m_staticSelectMusic); + DDX_Control(pDX, IDC_NEWGAMEFRAME, m_frameNewGame); + DDX_Control(pDX, IDC_BUTTON_CREATE_GAME, m_buttonCreateGame); DDX_Control(pDX, IDC_COMBO_MUSIC, m_comboMusic); DDX_Control(pDX, IDC_EDIT_GAME_NAME, m_editGameName); DDX_Control(pDX, IDC_EDIT_GAME_INFO, m_editGameInfo); @@ -103,8 +112,10 @@ BEGIN_MESSAGE_MAP(CSmlobbyDlg, CDialog) ON_WM_PAINT() ON_WM_DESTROY() ON_LBN_DBLCLK(IDC_LIST_GAMES, OnDblclkListGames) - ON_LBN_SELCHANGE(IDC_LIST_GAMES, OnSelchangeListGames) ON_BN_CLICKED(IDC_BUTTON_CREATE_GAME, OnButtonCreateGame) + ON_LBN_SELCHANGE(IDC_LIST_GAMES, OnSelchangeListGames) + ON_BN_CLICKED(IDC_BUTTON_BEGIN_GAME, OnButtonBeginGame) + ON_BN_CLICKED(IDC_REFRESH_GAME_LIST, OnRefreshGameList) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -148,6 +159,7 @@ BOOL CSmlobbyDlg::OnInitDialog() IRC_MAP_ENTRY(CSmlobbyDlg, "MODE", OnIrc_MODE) IRC_MAP_ENTRY(CSmlobbyDlg, "NICK", OnIrc_NICK) IRC_MAP_ENTRY(CSmlobbyDlg, "PART", OnIrc_PART) + IRC_MAP_ENTRY(CSmlobbyDlg, "QUIT", OnIrc_QUIT) IRC_MAP_ENTRY(CSmlobbyDlg, "PRIVMSG", OnIrc_PRIVMSG) IRC_MAP_ENTRY(CSmlobbyDlg, "DCC", OnIrc_DCC_SEND) IRC_MAP_ENTRY(CSmlobbyDlg, "002", OnIrc_YOURHOST) @@ -158,7 +170,7 @@ BOOL CSmlobbyDlg::OnInitDialog() IRC_MAP_ENTRY(CSmlobbyDlg, "332", OnIrc_RPL_TOPIC) IRC_MAP_ENTRY(CSmlobbyDlg, "353", OnIrc_RPL_NAMREPLY) IRC_MAP_ENTRY(CSmlobbyDlg, "366", OnIrc_IgnoreMesg) //RPL_ENDOFNAMES - IRC_MAP_ENTRY(CSmlobbyDlg, "376", OnIrc_IgnoreMesg) //RPL_ENDOFMOTD + IRC_MAP_ENTRY(CSmlobbyDlg, "376", OnIrc_RPL_ENDOFMOTD) //Initialize IRC Server connection dialog @@ -203,6 +215,8 @@ BOOL CSmlobbyDlg::OnInitDialog() GetDirListing( sDir+"\\*.*", arrayGroupDirs, true ); SortCStringArray( arrayGroupDirs ); + //FILE *fp = fopen("SongHashes.txt","wt"); + //int k=1000; for( unsigned i=0; i< arrayGroupDirs.GetSize(); i++ ) // for each dir in /Songs/ { CString sGroupDirName = arrayGroupDirs[i]; @@ -223,11 +237,19 @@ BOOL CSmlobbyDlg::OnInitDialog() continue; // ignore it CString sSongDir = ssprintf("%s\\%s\\%s", sDir, sGroupDirName, sSongDirName); + unsigned long ulSongHash = GetHashForDirectory( sSongDir ); m_comboMusic.AddString( sSongDir ); + m_comboMusic.SetItemData( m_comboMusic.GetCount()-1, ulSongHash ); + //fprintf(fp, "%d,%s,%lu\n", k, LPCSTR(sSongDir), ulSongHash); + //k++; } } + //fclose(fp); + //Make sure start game button is invisible + m_buttonStartGame.ShowWindow(FALSE); + return TRUE; // return TRUE unless you set the focus to a control } @@ -304,21 +326,69 @@ bool CSmlobbyDlg::OnIrc_NICK(const CIrcMessage* pmsg) bool CSmlobbyDlg::OnIrc_PRIVMSG(const CIrcMessage* pmsg) { - //See if were being sent a DCC command + //See if were being sent a DCC comand if (OnIrc_DCC_RECV(pmsg)) return true; - + + //see if someone is starting a game + if (OnIrc_DDR_GAME_START(pmsg)) + return true; + UpdateChatMessages( pmsg ); return true; } +bool CSmlobbyDlg::OnIrc_RPL_ENDOFMOTD(const CIrcMessage *pmsg) +{ + g_ircSession << irc::CIrcMessage(CString("join #mainlobby")); + + return true; +} + +bool CSmlobbyDlg::OnIrc_DDR_GAME_START(const CIrcMessage *pmsg) +{ + //incoming:: + // PRIVMSG :<0x01>DDR START + + //Make sure we have a parameter + if ( pmsg->parameters.size() < 1 ) + return false; + + //Make sure it's a DDR start + if ( std::string::npos == pmsg->parameters[1].find("\001DDR START") ) + return false; + + //Get the info for this chat room + String sSongPath = g_ircSession.GetInfo().sSongPath; + String sIP = g_ircSession.GetInfo().sHostIP; + String sMyUserName = g_ircSession.GetInfo().sNick; + + //Are we the one who stated the game + if (m_buttonStartGame.IsWindowVisible() == TRUE) + { + m_buttonStartGame.ShowWindow(FALSE); + if ( !WinExec("smserver.exe") ) + AfxMessageBox("Lobby unable to start Stepmania game server!"); + } + + //Start up the game + if ( !WinExec("stepmania.exe " + sSongPath + " " + sIP.c_str() + " " + sMyUserName.c_str()) ) + AfxMessageBox("Lobby unable to start Stepmania!"); + + //Bail from this lobby + g_ircSession << irc::CIrcMessage(CString("part ") + CString(g_ircSession.GetInfo().sCurrentChatRoom.c_str())); + + return true; +} + bool CSmlobbyDlg::OnIrc_DCC_SEND(const CIrcMessage *pmsg) { //incoming: // /DCC SEND //outgoing: - // PRIVMSG :<0x01>DCC SEND <0x01> + // PRIVMSG :<0x01>DCC SEND <0x01> + const kRecptParm = 1; //Make sure we have a parameter @@ -352,29 +422,41 @@ bool CSmlobbyDlg::OnIrc_DCC_SEND(const CIrcMessage *pmsg) CString dirname = fullpath.Left(fullpath.GetLength() - filename.GetLength()); //Place all of the connection info into a dcc info structure - irc::CIrcDCCServer::DCCTransferInfo dccInfo; + //irc::CIrcDCCServer::DCCTransferInfo dccInfo; + CSendFileDialog::DCCTransferInfo dccInfo; dccInfo.m_bIsSender = true; dccInfo.m_fileName = filename; dccInfo.m_directory = dirname; dccInfo.m_partnerName = partnerName; - dccInfo.m_uiPort = g_DCCServer.MakePortReservation(); + dccInfo.m_uiPort = CSendFileDialog::MakePortReservation(); dccInfo.m_uiXferRate = FILE_XFER_RATE; dccInfo.m_ulFileSize = GetFileSizeInBytes(fullpath); dccInfo.m_ulPartnerIP = ipaddr.host; //Create a dcc command to send to the user to which our file is going + // make sure data is in network byte order char szDCCString[512]; - sprintf(szDCCString, "PRIVMSG %s :\001DCC SEND %s %ul %u %ul\001", - dccInfo.m_partnerName, dccInfo.m_fileName, ipaddr.host, - dccInfo.m_uiPort, dccInfo.m_ulFileSize); + unsigned long ip = ntohl(ipaddr.host); + unsigned short port = dccInfo.m_uiPort;//htons(dccInfo.m_uiPort); + unsigned long filesize = dccInfo.m_ulFileSize;//htonl(dccInfo.m_ulFileSize); + sprintf(szDCCString, "PRIVMSG %s :\001DCC SEND %s %lu %u %lu \001", + dccInfo.m_partnerName, dccInfo.m_fileName, ip, port, filesize); //Send of the dcc command to the other party g_ircSession << irc::CIrcMessage(szDCCString); - //We now have enough info to fire off a thread that will + //We now have enough info to open a window that will //wait for the other party to connect to us and then //transfer the file to them - g_DCCServer.Start(dccInfo); + //g_DCCServer.Start(dccInfo); + CSendFileDialog *dlg = new CSendFileDialog(dccInfo); + + //Remember this dialog so that when we exit the app + //CSendFileDialog::FreeAnyCompletedTransfers() can release it + CSendFileDialog::AddTransferDialog(dlg); + + //Now let's try and open the window + if ( !dlg->Create(IDD_FILEXFER, NULL) || !dlg->Setup() ) return false; return true; } @@ -383,6 +465,7 @@ bool CSmlobbyDlg::OnIrc_DCC_RECV(const CIrcMessage *pmsg) { //incoming:: // PRIVMSG :<0x01>DCC SEND <0x01> + // filesize, ipaddress, and port are in network byte order //Make sure we have a parameter if ( pmsg->parameters.size() < 1 ) @@ -395,13 +478,28 @@ bool CSmlobbyDlg::OnIrc_DCC_RECV(const CIrcMessage *pmsg) //Make sure we can read out the dcc send fields const char* pszRawString = pmsg->parameters[1].c_str(); char szFilename[256]; - unsigned long ulPartnerIP; - unsigned short uiPartnerPort; - unsigned long ulFileSize; + unsigned long ulPartnerIP = 0L; + unsigned short uiPartnerPort = 0; + unsigned long ulFileSize = 0L; //Snag the dcc info fields from the message string - if ( 4 != sscanf(pszRawString, "\001DCC SEND %255s %lu %u %lu", - &szFilename, &ulPartnerIP, &uiPartnerPort, &ulFileSize) ) + int ret = sscanf(pszRawString, "\001DCC SEND %255s %lu %u %lu \001", + &szFilename, &ulPartnerIP, &uiPartnerPort, &ulFileSize); + if ( 4 != ret ) + return false; + + //Transform data from network byte order to host byte order + //ulFileSize = ntohl(ulFileSize); + //uiPartnerPort = ntohs(uiPartnerPort); + //ulPartnerIP = ntohl(ulPartnerIP); + + //See if this is an echo of a connection I already sent + IPaddress ipaddr; + char szHostName[256]; + gethostname(szHostName, 256); + SDLNet_ResolveHost(&ipaddr, szHostName, 0); + + if (ulPartnerIP == ntohl(ipaddr.host)) return false; //Open a dialog box so user can decide where to save file @@ -410,7 +508,8 @@ bool CSmlobbyDlg::OnIrc_DCC_RECV(const CIrcMessage *pmsg) return false; //Assemble all of this info into a dcc info structure - irc::CIrcDCCServer::DCCTransferInfo dccInfo; + //irc::CIrcDCCServer::DCCTransferInfo dccInfo; + CSendFileDialog::DCCTransferInfo dccInfo; dccInfo.m_bIsSender = false; dccInfo.m_directory = pathname; dccInfo.m_fileName = szFilename; @@ -420,8 +519,16 @@ bool CSmlobbyDlg::OnIrc_DCC_RECV(const CIrcMessage *pmsg) dccInfo.m_ulFileSize = ulFileSize; dccInfo.m_ulPartnerIP = ulPartnerIP; - //We now have enough info to fire off a thread that downloads the file - g_DCCServer.Start(dccInfo); + //We now have enough info to create a window to deal with file xfer + //g_DCCServer.Start(dccInfo); + CSendFileDialog *dlg = new CSendFileDialog(dccInfo); + + //Remember this dialog so that when we exit the app + //CSendFileDialog::FreeAnyCompletedTransfers() can release it + CSendFileDialog::AddTransferDialog(dlg); + + //Now let's try and open the window + if ( !dlg->Create(IDD_FILEXFER, NULL) || !dlg->Setup() ) return false; return true; } @@ -446,29 +553,50 @@ bool CSmlobbyDlg::OnIrc_JOIN(const CIrcMessage* pmsg) bool CSmlobbyDlg::OnIrc_PART(const CIrcMessage* pmsg) { - if( !pmsg->prefix.sNick.length() || pmsg->prefix.sNick == m_session.GetInfo().sNick ) - return false; - - //make sure to reset the names lists since were leaving current room - m_listUsers.ResetContent(); + char szName[256]; //forget which chat room we joined g_ircSession.GetInfo().sCurrentChatRoom = ""; + //if we are the host kick everyone else out + if ( g_ircSession.GetInfo().bIsGameHost ) + { + for (int i = 0; i < m_listUsers.GetCount(); i++) + { + m_listUsers.GetDlgItemText(i, szName, 256); + if (szName[0] != '@') + { + + } + } + } + + //make sure to reset the names lists since were leaving current room + m_listUsers.ResetContent(); + //query the server for a list of chat rooms g_ircSession << irc::CIrcMessage(CString("list")); UpdateChatMessages( pmsg ); + //Now that we've left a game, we can allow user to create a game + m_frameNewGame.ShowWindow(TRUE); + m_buttonCreateGame.ShowWindow(TRUE); + m_comboMusic.ShowWindow(TRUE); + m_editGameName.ShowWindow(TRUE); + m_staticGameName.ShowWindow(TRUE); + m_staticSelectMusic.ShowWindow(TRUE); + + return true; } bool CSmlobbyDlg::OnIrc_KICK(const CIrcMessage* pmsg) { - if( !pmsg->prefix.sNick.length() ) + /*if( !pmsg->prefix.sNick.length() ) return false; - UpdateChatMessages( pmsg ); + UpdateChatMessages( pmsg );*/ return true; } @@ -485,6 +613,20 @@ bool CSmlobbyDlg::OnIrc_MODE(const CIrcMessage* pmsg) return true; } + +bool CSmlobbyDlg::OnIrc_QUIT(const CIrcMessage *pmsg) +{ + //leave a game if we are currently in one + if (g_ircSession.GetInfo().sCurrentChatRoom != "") + { + g_ircSession << irc::CIrcMessage(CString("part ") + CString(g_ircSession.GetInfo().sCurrentChatRoom.c_str())); + } + + PostQuitMessage(0); + + return true; +} + bool CSmlobbyDlg::OnIrc_RPL_LISTSTART(const CIrcMessage *pmsg) { //Were going to be getting a new list of rooms @@ -512,7 +654,7 @@ bool CSmlobbyDlg::OnIrc_RPL_TOPIC(const CIrcMessage *pmsg) //Put the info for a game up in the game info box //msg Format: " :" - //topic format: "GameName\nserverIP\nServerIRCName\nSongHash" + //topic format: "GameName serverIP ServerIRCName SongHash SongPath" std::vector vecGameParams; const char* p1 = pmsg->parameters[2].c_str(); const char* p2 = p1; @@ -532,14 +674,54 @@ bool CSmlobbyDlg::OnIrc_RPL_TOPIC(const CIrcMessage *pmsg) } //somehow we lost some game info - if (vecGameParams.size() != 4) return false; + if (vecGameParams.size() != 5) return false; //Display game info m_editGameInfo.SetSel(-1, 0); m_editGameInfo.ReplaceSel(("Game Name: " + vecGameParams[0] + "\n").c_str()); m_editGameInfo.ReplaceSel(("Server IP: " + vecGameParams[1] + "\n").c_str()); m_editGameInfo.ReplaceSel(("Host IRC Name: " + vecGameParams[2] + "\n").c_str()); - m_editGameInfo.ReplaceSel(("Song Hash: " + vecGameParams[3] + "\n").c_str()); + m_editGameInfo.ReplaceSel(("Song: " + vecGameParams[4] + "\n").c_str()); + + //Get the hash value + unsigned long hash; + sscanf(vecGameParams[3].c_str(), "%ul", &hash); + + //Remember the game info for later + g_ircSession.SetGameInfo((m_buttonStartGame.IsWindowVisible() == TRUE) ? true: false, + vecGameParams[4], hash, vecGameParams[2], vecGameParams[1]); + + //See if we wanted to join a game + if (m_bWantToJoin == true) + { + m_bWantToJoin = false; + + //See if we have a song that matches that hash + if (FindSongNameFromHash(hash) >= 0) + { + //Tell the server that we join this a chat room + g_ircSession << irc::CIrcMessage(CString("join #") + + CString(vecGameParams[0].c_str())); + + return true; + } + //Otherwise ask if we want to send a song download request + else + { + int ret = AfxMessageBox("I'm sorry, you don't have the song their using.\nWould you like me to send a message into that room asking\nsomeone to send you a copy so that you can join?", MB_YESNO); + if (ret == IDYES) + { + String msg; + msg = "PRIVMSG #" + vecGameParams[0] + " " + + g_ircSession.GetInfo().sNick + + " would like to join you, but they need a copy of " + + vecGameParams[4]; + + g_ircSession << irc::CIrcMessage(CString(msg.c_str())); + return false; + } + } + } return true; } @@ -594,6 +776,9 @@ void CSmlobbyDlg::OnDestroy() g_ircSession.Disconnect(); g_ircSession.RemoveMonitor(this); + //Free any left over file transfer dialogs + CSendFileDialog::FreeAnyCompletedTransfers(); + //Close the parent application AfxGetApp()->ExitInstance(); } @@ -634,17 +819,25 @@ void CSmlobbyDlg::UpdateChatMessages( const CIrcMessage* p ) void CSmlobbyDlg::OnDblclkListGames() { + //make sure we're not in the room we are already trying to join //Get the game name that was currently selected - int nIndex = m_listGames.GetCurSel(); - CString strGameName; + char szGameName[128]; + int nDummy; - if (nIndex != LB_ERR) - { - m_listGames.GetText(nIndex, strGameName); - - //Tell the server that we wanted to join a chat room - g_ircSession << irc::CIrcMessage(CString("join ") + strGameName); - } + int nIndex = m_listGames.GetCurSel(); + if (nIndex == LB_ERR) return; + + m_listGames.GetText(nIndex, szGameName); + sscanf(szGameName, "%s (%d)", &szGameName, &nDummy); + + if (g_ircSession.GetInfo().sCurrentChatRoom == szGameName) return; + + //other wise, tell server we want to part this channel + if (g_ircSession.GetInfo().sCurrentChatRoom != "") + g_ircSession << irc::CIrcMessage(CString("part ") + CString(szGameName)); + + m_bWantToJoin = true; + OnSelchangeListGames(); } void CSmlobbyDlg::OnSelchangeListGames() @@ -692,9 +885,16 @@ void CSmlobbyDlg::OnButtonCreateGame() return; } + //Make sure we have some songs + if(m_comboMusic.GetCount() <= 0) + { + MessageBox("You don't have any songs!"); + return; + } + //Make sure a song is selected int iIndex = m_comboMusic.GetCurSel(); - if( iIndex <= 0 ) + if( iIndex == CB_ERR ) { MessageBox("Need to select a song to play!"); return; @@ -718,14 +918,48 @@ void CSmlobbyDlg::OnButtonCreateGame() unsigned long hash = GetHashForDirectory( sSongDir ); //Now tell the server our game info - CString sIrcMessage = ssprintf( "topic #%s :%s %s %s %u", + CString sIrcMessage = ssprintf( "topic #%s :%s %s %s %u ", gameName, gameName, host_ip_str, g_ircSession.GetInfo().sNick.c_str(), hash ); + //Tack on the song name + sIrcMessage += sSongDir; + + //make sure to clean out the values you put in the fields + m_comboMusic.SetCurSel(-1); + m_editGameName.SetSel(0, -1); + m_editGameName.Clear(); + + //Make sure we can't create another game until we part this lobby + m_frameNewGame.ShowWindow(FALSE); + m_buttonCreateGame.ShowWindow(FALSE); + m_comboMusic.ShowWindow(FALSE); + m_editGameName.ShowWindow(FALSE); + m_staticGameName.ShowWindow(FALSE); + m_staticSelectMusic.ShowWindow(FALSE); + + //Show the start game button + m_buttonStartGame.ShowWindow(TRUE); + + //Send off topic and request update now g_ircSession << irc::CIrcMessage(sIrcMessage); + g_ircSession << irc::CIrcMessage(CString("topic #") + gameName); +} + +int CSmlobbyDlg::FindSongNameFromHash(unsigned long hash) +{ + unsigned long comboHash; + for (int i = 0; i < m_comboMusic.GetCount(); i++) + { + comboHash = m_comboMusic.GetItemData(i); + if (hash == comboHash) + return i; + } + + return -1; } bool CSmlobbyDlg::IsUniqueGameName(const CString GameName) @@ -780,3 +1014,50 @@ CString CSmlobbyDlg::SelectFolder() return CString(szPath); } + +void CSmlobbyDlg::OnButtonBeginGame() +{ + //Create a dcc command to send to the user to which our file is going + char szString[64]; + sprintf(szString, "PRIVMSG %s :\001DDR START", g_ircSession.GetInfo().sCurrentChatRoom.c_str()); + + //Send of the dcc command to the other party + g_ircSession << irc::CIrcMessage(szString); +} + + +bool CSmlobbyDlg::WinExec(String sCmdLine) +{ + STARTUPINFO si; + PROCESS_INFORMATION pi; + + memset(&si,0,sizeof(si)); + memset(&pi,0,sizeof(pi)); + si.cb = sizeof(si); + si.wShowWindow=SW_SHOW; + + char szCmdLine[256]; + strncpy(szCmdLine, sCmdLine.c_str(), 255); + + int ret = CreateProcess( + NULL, // pointer to name of executable module + szCmdLine, // pointer to command line string + NULL, // pointer to process security attributes + NULL, // pointer to thread security attributes + FALSE, // handle inheritance flag + NULL, // creation flags + NULL, // pointer to new environment block + NULL, // pointer to current directory name + &si, // pointer to STARTUPINFO + &pi // pointer to PROCESS_INFORMATION + ); + + if (FAILED(ret)) return false; + else return true; +} + +void CSmlobbyDlg::OnRefreshGameList() +{ + //Ask for a refresh of the games + g_ircSession << irc::CIrcMessage("list"); +} diff --git a/stepmania/src/smlobby/smlobbyDlg.h b/stepmania/src/smlobby/smlobbyDlg.h index 07d9268ee6..4f9e63dd04 100644 --- a/stepmania/src/smlobby/smlobbyDlg.h +++ b/stepmania/src/smlobby/smlobbyDlg.h @@ -26,6 +26,11 @@ public: // Dialog Data //{{AFX_DATA(CSmlobbyDlg) enum { IDD = IDD_SMLOBBY_DIALOG }; + CButton m_buttonStartGame; + CStatic m_staticGameName; + CStatic m_staticSelectMusic; + CButton m_frameNewGame; + CButton m_buttonCreateGame; CComboBox m_comboMusic; CEdit m_editGameName; CEdit m_editGameInfo; @@ -44,6 +49,7 @@ public: // Implementation protected: HICON m_hIcon; + bool m_bWantToJoin; // Generated message map functions //{{AFX_MSG(CSmlobbyDlg) @@ -53,8 +59,10 @@ protected: virtual void OnPaint(); virtual void OnDestroy(); afx_msg void OnDblclkListGames(); - afx_msg void OnSelchangeListGames(); afx_msg void OnButtonCreateGame(); + afx_msg void OnSelchangeListGames(); + afx_msg void OnButtonBeginGame(); + afx_msg void OnRefreshGameList(); //}}AFX_MSG DECLARE_MESSAGE_MAP() @@ -66,12 +74,15 @@ protected: bool OnIrc_PART(const CIrcMessage* pmsg); bool OnIrc_KICK(const CIrcMessage* pmsg); bool OnIrc_MODE(const CIrcMessage* pmsg); + bool OnIrc_QUIT(const CIrcMessage *pmsg); bool OnIrc_RPL_LISTSTART(const CIrcMessage *pmsg); bool OnIrc_RPL_LIST(const CIrcMessage *pmsg); bool OnIrc_RPL_TOPIC(const CIrcMessage *pmsg); bool OnIrc_RPL_NAMREPLY(const CIrcMessage *pmsg); bool OnIrc_DCC_SEND(const CIrcMessage *pmsg); bool OnIrc_DCC_RECV(const CIrcMessage *pmsg); + bool OnIrc_DDR_GAME_START(const CIrcMessage *pmsg); + bool OnIrc_RPL_ENDOFMOTD(const CIrcMessage *pmsg); bool OnIrc_IgnoreMesg(const CIrcMessage *pmsg) { return true; } virtual void OnIrcDefault(const CIrcMessage* pmsg); @@ -79,7 +90,9 @@ protected: void UpdateChatMessages( const CIrcMessage* p ); bool IsUniqueGameName(const CString GameName); + int FindSongNameFromHash(unsigned long hash); CString SelectFolder(); + bool WinExec(String sCmdLine); }; //{{AFX_INSERT_LOCATION}} diff --git a/stepmania/src/smlobby/socket.cpp b/stepmania/src/smlobby/socket.cpp index fc691142f9..e4019b8628 100644 --- a/stepmania/src/smlobby/socket.cpp +++ b/stepmania/src/smlobby/socket.cpp @@ -106,7 +106,16 @@ bool Socket::Listen() Socket Socket::Accept() { - return Socket(SDLNet_TCP_Accept(m_sock)); + const int kMaxRetry = 10; + TCPsocket new_sock; + + for (int i = 0; i < kMaxRetry; i++) + { + new_sock = SDLNet_TCP_Accept(m_sock); + if ( new_sock ) break; + } + + return Socket(new_sock); } int Socket::Send(const unsigned char* buf, int cbBuf)