1/*
2 *  Copyright 2012 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/examples/peerconnection/client/conductor.h"
12#include "webrtc/examples/peerconnection/client/flagdefs.h"
13#include "webrtc/examples/peerconnection/client/main_wnd.h"
14#include "webrtc/examples/peerconnection/client/peer_connection_client.h"
15#include "webrtc/base/ssladapter.h"
16#include "webrtc/base/win32socketinit.h"
17#include "webrtc/base/win32socketserver.h"
18
19
20int PASCAL wWinMain(HINSTANCE instance, HINSTANCE prev_instance,
21                    wchar_t* cmd_line, int cmd_show) {
22  rtc::EnsureWinsockInit();
23  rtc::Win32Thread w32_thread;
24  rtc::ThreadManager::Instance()->SetCurrentThread(&w32_thread);
25
26  rtc::WindowsCommandLineArguments win_args;
27  int argc = win_args.argc();
28  char **argv = win_args.argv();
29
30  rtc::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
31  if (FLAG_help) {
32    rtc::FlagList::Print(NULL, false);
33    return 0;
34  }
35
36  // Abort if the user specifies a port that is outside the allowed
37  // range [1, 65535].
38  if ((FLAG_port < 1) || (FLAG_port > 65535)) {
39    printf("Error: %i is not a valid port.\n", FLAG_port);
40    return -1;
41  }
42
43  MainWnd wnd(FLAG_server, FLAG_port, FLAG_autoconnect, FLAG_autocall);
44  if (!wnd.Create()) {
45    ASSERT(false);
46    return -1;
47  }
48
49  rtc::InitializeSSL();
50  PeerConnectionClient client;
51  rtc::scoped_refptr<Conductor> conductor(
52        new rtc::RefCountedObject<Conductor>(&client, &wnd));
53
54  // Main loop.
55  MSG msg;
56  BOOL gm;
57  while ((gm = ::GetMessage(&msg, NULL, 0, 0)) != 0 && gm != -1) {
58    if (!wnd.PreTranslateMessage(&msg)) {
59      ::TranslateMessage(&msg);
60      ::DispatchMessage(&msg);
61    }
62  }
63
64  if (conductor->connection_active() || client.is_connected()) {
65    while ((conductor->connection_active() || client.is_connected()) &&
66           (gm = ::GetMessage(&msg, NULL, 0, 0)) != 0 && gm != -1) {
67      if (!wnd.PreTranslateMessage(&msg)) {
68        ::TranslateMessage(&msg);
69        ::DispatchMessage(&msg);
70      }
71    }
72  }
73
74  rtc::CleanupSSL();
75  return 0;
76}
77