10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef PEERCONNECTION_SAMPLES_CLIENT_MAIN_WND_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PEERCONNECTION_SAMPLES_CLIENT_MAIN_WND_H_ 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#pragma once 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <map> 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediastreaminterface.h" 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/examples/peerconnection/client/peer_connection_client.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/mediachannel.h" 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/videocommon.h" 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/videoframe.h" 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/videorenderer.h" 41cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/win32.h" 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MainWndCallback { 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartLogin(const std::string& server, int port) = 0; 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DisconnectFromServer() = 0; 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void ConnectToPeer(int peer_id) = 0; 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DisconnectFromCurrentPeer() = 0; 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void UIThreadCallback(int msg_id, void* data) = 0; 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void Close() = 0; 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~MainWndCallback() {} 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Pure virtual interface for the main window. 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MainWindow { 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~MainWindow() {} 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum UI { 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CONNECT_TO_SERVER, 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LIST_PEERS, 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org STREAMING, 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void RegisterObserver(MainWndCallback* callback) = 0; 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool IsWindow() = 0; 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void MessageBox(const char* caption, const char* text, 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool is_error) = 0; 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual UI current_ui() = 0; 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToConnectUI() = 0; 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToPeerList(const Peers& peers) = 0; 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToStreamingUI() = 0; 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartLocalRenderer(webrtc::VideoTrackInterface* local_video) = 0; 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StopLocalRenderer() = 0; 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartRemoteRenderer(webrtc::VideoTrackInterface* remote_video) = 0; 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StopRemoteRenderer() = 0; 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void QueueUIThreadCallback(int msg_id, void* data) = 0; 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifdef WIN32 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MainWnd : public MainWindow { 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const wchar_t kClassName[]; 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum WindowMessages { 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org UI_THREAD_CALLBACK = WM_APP + 1, 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 96249b3894e5fe5cd977313f0df6eb222d5010b561kjellander@webrtc.org MainWnd(const char* server, int port, bool auto_connect, bool auto_call); 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~MainWnd(); 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool Create(); 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool Destroy(); 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool PreTranslateMessage(MSG* msg); 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void RegisterObserver(MainWndCallback* callback); 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool IsWindow(); 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToConnectUI(); 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToPeerList(const Peers& peers); 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SwitchToStreamingUI(); 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void MessageBox(const char* caption, const char* text, 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool is_error); 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual UI current_ui() { return ui_; } 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartLocalRenderer(webrtc::VideoTrackInterface* local_video); 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StopLocalRenderer(); 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StartRemoteRenderer(webrtc::VideoTrackInterface* remote_video); 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void StopRemoteRenderer(); 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void QueueUIThreadCallback(int msg_id, void* data); 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND handle() const { return wnd_; } 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class VideoRenderer : public webrtc::VideoRendererInterface { 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoRenderer(HWND wnd, int width, int height, 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoTrackInterface* track_to_render); 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~VideoRenderer(); 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void Lock() { 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ::EnterCriticalSection(&buffer_lock_); 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void Unlock() { 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ::LeaveCriticalSection(&buffer_lock_); 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // VideoRendererInterface implementation 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetSize(int width, int height); 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void RenderFrame(const cricket::VideoFrame* frame); 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const BITMAPINFO& bmi() const { return bmi_; } 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const uint8* image() const { return image_.get(); } 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum { 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SET_SIZE, 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RENDER_FRAME, 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND wnd_; 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org BITMAPINFO bmi_; 1502a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<uint8[]> image_; 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CRITICAL_SECTION buffer_lock_; 1522a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_refptr<webrtc::VideoTrackInterface> rendered_track_; 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // A little helper class to make sure we always to proper locking and 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // unlocking when working with VideoRenderer buffers. 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org template <typename T> 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class AutoLock { 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org explicit AutoLock(T* obj) : obj_(obj) { obj_->Lock(); } 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~AutoLock() { obj_->Unlock(); } 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org T* obj_; 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum ChildWindowID { 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EDIT_ID = 1, 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org BUTTON_ID, 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LABEL1_ID, 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LABEL2_ID, 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LISTBOX_ID, 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnPaint(); 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnDestroyed(); 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnDefaultAction(); 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool OnMessage(UINT msg, WPARAM wp, LPARAM lp, LRESULT* result); 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static bool RegisterWindowClass(); 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChildWindow(HWND* wnd, ChildWindowID id, const wchar_t* class_name, 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DWORD control_style, DWORD ex_style); 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChildWindows(); 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void LayoutConnectUI(bool show); 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void LayoutPeerListUI(bool show); 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void HandleTabbing(); 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1952a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<VideoRenderer> local_renderer_; 1962a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<VideoRenderer> remote_renderer_; 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org UI ui_; 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND wnd_; 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DWORD ui_thread_id_; 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND edit1_; 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND edit2_; 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND label1_; 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND label2_; 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND button_; 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org HWND listbox_; 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool destroyed_; 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void* nested_msg_; 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MainWndCallback* callback_; 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static ATOM wnd_class_; 210249b3894e5fe5cd977313f0df6eb222d5010b561kjellander@webrtc.org std::string server_; 211249b3894e5fe5cd977313f0df6eb222d5010b561kjellander@webrtc.org std::string port_; 212249b3894e5fe5cd977313f0df6eb222d5010b561kjellander@webrtc.org bool auto_connect_; 213249b3894e5fe5cd977313f0df6eb222d5010b561kjellander@webrtc.org bool auto_call_; 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // WIN32 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // PEERCONNECTION_SAMPLES_CLIENT_MAIN_WND_H_ 218