MediaServerDlg.cpp
上传用户:hhs829
上传日期:2022-06-17
资源大小:586k
文件大小:4k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // MediaServerDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "resource.h"
  5. #include "MediaServer.h"
  6. #include "MediaServerDlg.h"
  7. #include "CListenSocket.h"
  8. #include "CMediaSocketServer.h"
  9. #include "CLocalMachine.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMediaServerDlg dialog
  17. CMediaServerDlg::CMediaServerDlg(CWnd* pParent /*=NULL*/)
  18. : CDialog(IDD_MEDIASERVER_DIALOG, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CMediaServerDlg)
  21. // NOTE: the ClassWizard will add member initialization here
  22. //}}AFX_DATA_INIT
  23. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  24. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  25. m_pListener     = NULL;
  26. m_pWorkerSock   = NULL;
  27. m_strSourceFile = "";
  28. }
  29. void CMediaServerDlg::DoDataExchange(CDataExchange* pDX)
  30. {
  31. CDialog::DoDataExchange(pDX);
  32. //{{AFX_DATA_MAP(CMediaServerDlg)
  33. DDX_Control(pDX, IDC_STATIC_HOSTIP, m_hostIP);
  34. DDX_Control(pDX, IDC_STATIC_HOST, m_host);
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CMediaServerDlg, CDialog)
  38. //{{AFX_MSG_MAP(CMediaServerDlg)
  39. ON_WM_PAINT()
  40. ON_WM_QUERYDRAGICON()
  41. ON_WM_DESTROY()
  42. ON_BN_CLICKED(IDC_BUTTON_SELECT, OnButtonSelect)
  43. //}}AFX_MSG_MAP
  44. ON_MESSAGE(WM_NEW_SOCKET, ListenOnConnection)
  45. END_MESSAGE_MAP()
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CMediaServerDlg message handlers
  48. BOOL CMediaServerDlg::OnInitDialog()
  49. {
  50. CDialog::OnInitDialog();
  51. // Set the icon for this dialog.  The framework does this automatically
  52. //  when the application's main window is not a dialog
  53. SetIcon(m_hIcon, TRUE); // Set big icon
  54. SetIcon(m_hIcon, FALSE); // Set small icon
  55. char  host[255], hostIP[255];
  56. CLocalMachine  myhost;
  57. myhost.GetIPAddress(hostIP, host);
  58. m_host.SetWindowText(host);
  59. m_hostIP.SetWindowText(hostIP);
  60. // Create a server listen socket....
  61. bool  pass = true;
  62. m_pListener = new CListenSocket();
  63. pass = m_pListener->Create(BASE_SOCKET_PORT);
  64. if (pass)
  65. {
  66. pass = m_pListener->StartListen();
  67. }
  68. // Select an init mpeg file
  69. if (pass)
  70. {
  71. OnButtonSelect();
  72. }
  73. return TRUE;  // return TRUE  unless you set the focus to a control
  74. }
  75. // If you add a minimize button to your dialog, you will need the code below
  76. //  to draw the icon.  For MFC applications using the document/view model,
  77. //  this is automatically done for you by the framework.
  78. void CMediaServerDlg::OnPaint() 
  79. {
  80. if (IsIconic())
  81. {
  82. CPaintDC dc(this); // device context for painting
  83. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  84. // Center icon in client rectangle
  85. int cxIcon = GetSystemMetrics(SM_CXICON);
  86. int cyIcon = GetSystemMetrics(SM_CYICON);
  87. CRect rect;
  88. GetClientRect(&rect);
  89. int x = (rect.Width() - cxIcon + 1) / 2;
  90. int y = (rect.Height() - cyIcon + 1) / 2;
  91. // Draw the icon
  92. dc.DrawIcon(x, y, m_hIcon);
  93. }
  94. else
  95. {
  96. CDialog::OnPaint();
  97. }
  98. }
  99. // The system calls this to obtain the cursor to display while the user drags
  100. //  the minimized window.
  101. HCURSOR CMediaServerDlg::OnQueryDragIcon()
  102. {
  103. return (HCURSOR) m_hIcon;
  104. }
  105. void CMediaServerDlg::OnDestroy() 
  106. {
  107. if (m_pListener != NULL)
  108. {
  109. delete m_pListener;
  110. m_pListener = NULL;
  111. }
  112. if (m_pWorkerSock != NULL)
  113. {
  114. delete m_pWorkerSock;
  115. m_pWorkerSock = NULL;
  116. }
  117. CDialog::OnDestroy();
  118. }
  119. // Select a source mpeg file
  120. void CMediaServerDlg::OnButtonSelect() 
  121. {
  122. CFileDialog  dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
  123. "Mpeg Files (*.mpg;*.mpeg)|*.mpg; *.mpeg|", NULL);
  124. if (dlg.DoModal() == IDOK)
  125. {
  126. m_strSourceFile = dlg.GetPathName();
  127. ListenOnConnection();
  128. }
  129. }
  130. void CMediaServerDlg::ListenOnConnection()
  131. {
  132. // Check if has some socket connection
  133. if (m_pListener)
  134. {
  135. if (m_pListener->m_ClientList.GetCount())
  136. {
  137. SOCKET pSock = (SOCKET) m_pListener->m_ClientList.GetHead();
  138. if (m_pWorkerSock == NULL)
  139. m_pWorkerSock = new CMediaSocketServer();
  140. m_pWorkerSock->Attach(pSock);
  141. ((CMediaSocketServer *)m_pWorkerSock)->SetSourceFile(m_strSourceFile);
  142. m_pWorkerSock->StartReceiving();
  143. }
  144. }
  145. }