From fa3572a33e38774aab5da1233c442a2afe9f4c75 Mon Sep 17 00:00:00 2001 From: Brendan Walker Date: Thu, 19 Dec 2002 23:59:12 +0000 Subject: [PATCH] Got DCC Send and Recieve working (without having to use threads) --- stepmania/src/smlobby/SendFileDialog.cpp | 424 ++++++- stepmania/src/smlobby/SendFileDialog.h | 76 +- stepmania/src/smlobby/irc.cpp | 31 +- stepmania/src/smlobby/irc.h | 21 +- stepmania/src/smlobby/res/smlobby.ico | Bin 1078 -> 1078 bytes stepmania/src/smlobby/resource2.h | 6 +- stepmania/src/smlobby/smlobby.aps | Bin 40320 -> 40676 bytes stepmania/src/smlobby/smlobby.clw | 1428 ++-------------------- stepmania/src/smlobby/smlobby.dsp | 4 + stepmania/src/smlobby/smlobby.ncb | Bin 132093 -> 82942 bytes stepmania/src/smlobby/smlobby.opt | Bin 50688 -> 49664 bytes stepmania/src/smlobby/smlobby.plg | 42 + stepmania/src/smlobby/smlobby.rc | 16 +- stepmania/src/smlobby/smlobbyDlg.cpp | 367 +++++- stepmania/src/smlobby/smlobbyDlg.h | 15 +- stepmania/src/smlobby/socket.cpp | 11 +- 16 files changed, 996 insertions(+), 1445 deletions(-) create mode 100644 stepmania/src/smlobby/smlobby.plg 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 7eef0bcbe6580a6f464d688906172c2d9de44262..729a2ae1eb9ec2ecc036778945a5b5bd1ccbed2d 100644 GIT binary patch literal 1078 zcmc(eF>b;@5Jf-nDoTN{5jg-=lycFeqcOsA#UY4-_8czK`!FtPT)5mr5T!}AaY;x1 ztbr<#BBjWf@$8%by*79NM!3Ozo7B+I?n6(1szh1nEczEp!O$}Mcyv7rXW zy~|N-cpPSt7Y3%#sG&0Nfr!^ec1CSrnw{OTS-)a1>pS_+&^g!1pEIv>&h__EamJ}s zoNq09aPg}-*Kr^I1(+NFeqx5pdO~J~&pzfSCq8AiX+J^Qk9`ZOWADAXe8(DCH=PgU a&hxFLJ^MwWSLtt@r@hfyb>!3}jLb9s)T}@Kod(893@u8ajANzT`op9^o+)S?=nU(FD@%0s)Sg^oyC8{H z9myetc;MEP)59v(LMa~xK8Yu^jIR*H22uCFiq5%C{s7(PJi>o15i^bmX4(vPxWAio z9ryY#AU_jfnd047-@`)XzL?%iS$gQyFP{44kS9X)fN{{QoL~hO-&=q&20Zr*cxFAt PkaNE{wR~2C$NfnjhSXWT 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 6df6bcde33376e74f1cfc278b1044c998a1252fe..941644be27ccfd6b5530187ec07902f8431d8bf5 100644 GIT binary patch delta 1440 zcmaJ=UuauZ82`?_r%5)fWJczQYg$yKc4fQi$*h>_ZgP_}ku)n!HaC%_Ve!&33sdWh zpbb)M#pX}@Ii*SG(|i#@$Mr>`!-v9N2KulEsW3MjV|!@WV-+-h=iY2q%KR=l-}!yN z-}l{L4(FDd%FQ2?T1+i90Dp@Ny8*g&fTwV}-h1&vM4d~;jC>~k@@Ql%o|vEof|>}z zGXRpv#?x^lmmfQpO%cdNaw$XdLond*vMZmF%fF<60}eSs1LN6b-WH`(*_><*!5~0B zGM=TEp2+1VF#ggbYzUt_*2e@+WqQ=Z5W>~eesR5wK^+9eu9FHiE;djwN-ww08INnI_MQ%L4Pqy#$yPIRLF~(+b#u&CP8a<4i!=GYj z*c~ez?@`$Xo=iT;wybxPn_Uk$M_}~0{{JkuX?9qo6BDpau+yV`rogy-4^C&~!7XI; zXPIhUo?lg12@4<2%t70UE%3^n3x1@eVr;&LGh@mLo7|tb)Suc9C%Dd6(mhB0UO>gcso!QV2`(>wu{wy z0PE|IUQk&SHRDVWdxq)8jrY;DJp$dZn}~M11QYNYnD8d8Z^0Dw!6+19hEN}*VVY{Q)bFk} z6iOFrx7mIyFUKXgx@^icvf_VU-Wg?Ft_PqW7Qq95sO|RqvS7zOE@*RqZsV}F;+Ipt zTJZ;@^q%qz+3>($+mzPLm6BWO*3qm#&3?ghz1MZC3!p!OpXvepxz3f)D87>jxPGNE z`;vHSG~n78p=}BSjVF};1>BfFh-VvInOZ>q2M1l}7{Ip+_+?{Ad3_PDH3G`)$M`p; z@0T#J7Eqv!FRuArQTieVD|m`3wPk#d()=g*IVJCBc!^T7j@QMgs%18q* Ht@{4~`Wuy* delta 1181 zcmZWoT}TvB6h8Ov>^ezp($7Yle`!>hq()_krrXZi3KK;xQW5o#1qp!!y@cS{?~=5; zdDd`svmPpX=%LsiqRd|AA!H&5f*yScvY-K>VliSn_s;lJU6|SL@1A?k9rn{JZoK3v z%~LuGcsJ5m1dwS3*o1G#DxTgCdGM%G#s;qV506F$JsV?b-nwP`hsrSWciH6|ia zHiH|r)w!>cVh`)WAJJ;|J-5E&n-@ow4Rq$igKfK+FZcOshBLr{___XqyYiqq$bck) zJb)t@1d@_UA#O{-CY6>Nx9u4LTn_#j2imTZFoa9K?Ih-NE(N>a-Ajh_Y*5{TPQ-@9 zv|Au)IECV(H`}HzN$}fo*{q;akW=L43?#(eq4JjFQ+bigTb2+Ec|IwElag?nP#tPn zZc~b7nWm*%y6vA9O)9#n>!zid^W4-;Q`anwru^Ht{gP{%u50wNr{$1}V7g{%beG*? zD#g@f1=ALN8=#O!0bO&aQp9et5aCBCZD?C67BmO+9hIM5-5iZ{6mnPNOp3ORU2u?rfe1O+m9!*<-V?FfW9cs zMa%JCR^jSZ^xrAPz_nGr0A-^N{h1B$w17K`^y@(XHxItfuJvtY0I?f*Y%thgMd9qA zu>ABG!~p6`mMId@tC*tG()W_zE#;*?cmS5)6#Iog@Sp#l1JtJG{mcLQMbJZmO2nRY uaPxP9kB3FJgdRGWRy{2C5+(j=1dB)aqA{-U-VDK=_+s48KW1=hJopFHceL67 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 7516b2b4bd02e6e1a4783f9869b50278b1dcd974..77cb276a7a13a51147077a027935768412febd92 100644 GIT binary patch literal 82942 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 Pd=B^=@Hz0`$$|e5Z3FSE literal 132093 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 B^#=d| diff --git a/stepmania/src/smlobby/smlobby.opt b/stepmania/src/smlobby/smlobby.opt index f0c42f6e5c9366d885f598df630d012034a8b2e0..15a986f466d5758f7ef4631c5bb0fbc7834a9487 100644 GIT binary patch literal 49664 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 R`#*{OpTz!8Z}t99{|j+&(_{bu literal 50688 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 + +
+

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)