示例#1
0
 /// <summary>
 /// The on web socket message.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 /// <param name="connectionId">
 /// The connection id.
 /// </param>
 /// <param name="data">
 /// The data.
 /// </param>
 /// <param name="dataSize">
 /// The data size.
 /// </param>
 protected override void OnWebSocketMessage(CefServer server, int connectionId, IntPtr data, long dataSize)
 {
     lock (mlockObj)
     {
         mWebsocketHandler?.OnMessage(connectionId, data, dataSize);
     }
 }
 public OnHttpRequestEventArgs(CefServer server, int connectionId, string clientAddress, CefRequest request)
     : base(server)
 {
     this.ConnectionId  = connectionId;
     this.ClientAddress = clientAddress;
     this.Request       = request;
 }
        public RequestHelper(CefServer server, CefRequest request)
        {
            this.request = request;
            this.server  = server;
            this.Url     = request.Url;

            this.FirstPartyForCookies = request.FirstPartyForCookies;
            this.Identifier           = (int)request.Identifier;
            this.IsReadOnly           = request.IsReadOnly;
            this.Method  = request.Method;
            this.Options = request.Options.ToString();

            var data = new PostHelper();

            if (request.PostData != null)
            {
                foreach (var element in request.PostData.GetElements())
                {
                    data.Append(element);
                }
            }

            this.PostData       = data.Raw;
            this.ReferrerPolicy = request.ReferrerPolicy.ToString();
            this.ReferrerURL    = request.ReferrerURL;
            this.ResourceType   = request.ResourceType.ToString();
            this.TransitionType = request.TransitionType.ToString();
            this.Url            = request.Url;
        }
        protected override void OnWebSocketMessage(CefServer server, int connectionId, IntPtr data, long dataSize)
        {
            if (this.webCallbacks["onWebSocketMessage"] != null)
            {
                try
                {
                    if (dataSize > 0)
                    {
                        byte[] messageBytes = new byte[dataSize];
                        Marshal.Copy(data, messageBytes, 0, (int)dataSize);
                        var message = Encoding.Default.GetString(messageBytes);

                        var _callback = this.webCallbacks["onWebSocketMessage"];
                        new Task(() =>
                        {
                            _callback.Context.Enter();
                            _callback.Runner.PostTask(new CallbackTask(_callback.Context, _callback.Callback, connectionId, message));
                            _callback.Context.Exit();
                        }).Start();
                    }
                }
                catch (Exception ex) { Log.Trace(ex.Message, ex.StackTrace, true); }
            }

            if (onWebSocketMessage != null)
            {
                onWebSocketMessage(this, new OnWebSocketMessageEventArgs(server, connectionId, data, dataSize));
            }
        }
        protected override void OnWebSocketRequest(CefServer server, int connectionId, string clientAddress, CefRequest request, CefCallback callback)
        {
            if (this.webCallbacks["onWebSocketRequest"] != null)
            {
                try
                {
                    var _callback = this.webCallbacks["onWebSocketRequest"];
                    new Task(() =>
                    {
                        _callback.Context.Enter();
                        var _request = new RequestHelper(server, request);
                        this.webResponseCallbacks.Add(connectionId, _request);
                        _callback.Runner.PostTask(new CallbackTask(_callback.Context, _callback.Callback, connectionId, clientAddress, _request.ToJson()));
                        _callback.Context.Exit();
                    }).Start();

                    callback.Continue();
                }
                catch (Exception ex) { Log.Trace(ex.Message, ex.StackTrace, true); }
            }
            if (onWebSocketRequest != null)
            {
                onWebSocketRequest(this, new OnWebSocketRequestEventArgs(server, connectionId, clientAddress, request, callback));
            }
        }
示例#6
0
        /// <summary>
        /// The start server.
        /// </summary>
        /// <param name="port">
        /// The port.
        /// </param>
        /// <param name="completecallback">
        /// The completecallback.
        /// </param>
        public void StartServer(int port, Action completecallback)
        {
            if (!CefRuntime.CurrentlyOn(CefThreadId.UI))
            {
                Action <int, Action> startServer =
                    (p, c) => this.StartServer(p, c);

                this.PostTask(CefThreadId.UI, startServer, port, completecallback);

                return;
            }

            if (this.mServer == null)
            {
                if (!(port >= 1025 && port <= 65535))
                {
                    return;
                }

                this.Address           = DefaultServerAddress;
                this.Port              = port;
                this.mCompleteCallback = completecallback;

                CefServer.Create(this.Address, (ushort)this.Port, DefaultServerBacklog, this);
            }
        }
 public OnWebSocketMessageEventArgs(CefServer server, int connectionId, IntPtr data, long dataSize)
     : base(server)
 {
     this.ConnectionId = connectionId;
     this.Data         = data;
     this.DataSize     = dataSize;
 }
示例#8
0
        /// <summary>
        /// The start server.
        /// </summary>
        /// <param name="address">
        /// The address.
        /// </param>
        /// <param name="port">
        /// The port.
        /// </param>
        /// <param name="completecallback">
        /// The completecallback.
        /// </param>
        public void StartServer(string address, int port, Action completecallback)
        {
            if (!CefRuntime.CurrentlyOn(CefThreadId.UI))
            {
                Action <string, int, Action> startServer =
                    (a, p, c) => StartServer(a, p, c);

                PostTask(CefThreadId.UI, startServer, address, port, completecallback);

                return;
            }

            if (mServer == null)
            {
                if (!(port >= 1025 && port <= 65535))
                {
                    return;
                }

                Address           = string.IsNullOrWhiteSpace(address) ? DefaultServerAddress : address;
                Port              = port;
                mCompleteCallback = completecallback;


                CefServer.Create(Address, (ushort)Port, DefaultServerBacklog, this);
            }
        }
示例#9
0
        /// <summary>
        /// The on web socket message.
        /// </summary>
        /// <param name="server">
        /// The server.
        /// </param>
        /// <param name="connectionId">
        /// The connection id.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        /// <param name="dataSize">
        /// The data size.
        /// </param>
        protected override void OnWebSocketMessage(CefServer server, int connectionId, IntPtr data, long dataSize)
        {
            Task.Factory.StartNew(() =>
            {
                IntPtr tempPtr   = IntPtr.Zero;
                IntPtr outIntPtr = IntPtr.Zero;

                try
                {
                    var managedArray = new byte[dataSize];
                    Marshal.Copy(data, managedArray, 0, (int)dataSize);
                    tempPtr = Marshal.AllocHGlobal(managedArray.Length);
                    Marshal.Copy(managedArray, 0, tempPtr, managedArray.Length);

                    var requestString = Encoding.UTF8.GetString(managedArray);

                    var jsonData = JsonMapper.ToObject <JsonData>(requestString);
                    var request  = new ChromelyRequest(jsonData);

                    var response = RequestTaskRunner.Run(request);
                    WebsocketMessageSender.Send(connectionId, response);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }
                finally
                {
                    // Free the unmanaged memory.
                    Marshal.FreeHGlobal(tempPtr);
                    Marshal.FreeHGlobal(outIntPtr);
                }
            });
        }
 public OnWebSocketRequestEventArgs(CefServer server, int connectionId, string clientAddress, CefRequest request, CefCallback callback)
     : base(server)
 {
     this.ConnectionId  = connectionId;
     this.ClientAddress = clientAddress;
     this.Request       = request;
     this.Callback      = callback;
 }
 public void Connect()
 {
     if (!IsConnected && !string.IsNullOrEmpty(this.Address) && this.Port > 0 && this.Threads > 0)
     {
         CefServer.Create(this.Address, (ushort)this.Port, this.Threads, this);
         IsConnected = true;
     }
 }
示例#12
0
 /// <summary>
 /// The dispose server.
 /// </summary>
 public void DisposeServer()
 {
     if (mServer != null)
     {
         mServer.Dispose();
         IsServerRunning = false;
         mServer         = null;
     }
 }
 /// <summary>
 /// The on server destroyed.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 protected override void OnServerDestroyed(CefServer server)
 {
     if (_server != null)
     {
         _server         = null;
         IsServerRunning = false;
         RunCompleteCallback(true);
     }
 }
示例#14
0
 /// <summary>
 /// The on server destroyed.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 protected override void OnServerDestroyed(CefServer server)
 {
     if (this.mServer != null)
     {
         this.mServer         = null;
         this.IsServerRunning = false;
         this.RunCompleteCallback(true);
     }
 }
示例#15
0
 /// <summary>
 /// The dispose server.
 /// </summary>
 public void DisposeServer()
 {
     if (this.mServer != null)
     {
         this.mServer.Dispose();
         this.IsServerRunning = false;
         this.mServer         = null;
     }
 }
示例#16
0
 /// <summary>
 /// The on server created.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 protected override void OnServerCreated(CefServer server)
 {
     if (this.mServer == null)
     {
         this.mServer = server;
         IoC.RegisterInstance(typeof(CefServer), typeof(CefServer).FullName, this.mServer);
         this.IsServerRunning = server.IsRunning;
         this.RunCompleteCallback(server.IsRunning);
     }
 }
示例#17
0
 /// <summary>
 /// The on server created.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 protected override void OnServerCreated(CefServer server)
 {
     if (mServer == null)
     {
         ConnectionNameMapper.Clear();
         mServer = server;
         IoC.RegisterInstance(typeof(CefServer), typeof(CefServer).FullName, mServer);
         IsServerRunning = server.IsRunning;
         RunCompleteCallback(server.IsRunning);
     }
 }
示例#18
0
        /// <summary>
        /// The on web socket request.
        /// </summary>
        /// <param name="server">
        /// The server.
        /// </param>
        /// <param name="connectionId">
        /// The connection id.
        /// </param>
        /// <param name="clientAddress">
        /// The client address.
        /// </param>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <param name="callback">
        /// The callback.
        /// </param>
        protected override void OnWebSocketRequest(
            CefServer server,
            int connectionId,
            string clientAddress,
            CefRequest request,
            CefCallback callback)
        {
            // Cache name and connection identifier.
            ConnectionNameMapper.Add(request.Url, connectionId);

            // Always accept WebSocket connections.
            callback.Continue();
        }
示例#19
0
        private InternalHandle create(V8Engine engine, bool isConstructCall, InternalHandle _this, InternalHandle[] args)
        {
            if (args.Length == 3)
            {
                var address = args[0].AsString;
                var port    = args[1].AsInt32;
                var threads = args[2].AsInt32;
                if (!string.IsNullOrEmpty(address) && port > 0 && threads > 0)
                {
                    var serverHandler = new ServerHandler();
                    CefServer.Create(address, (ushort)port, threads, serverHandler);
                }
            }

            return(null);
        }
        public virtual void Open(InputSetup setup)
        {
            _queue?.Dispose();
            var contextSetup = (WebBrowserContextSetup)setup.ObjectInput;

            _size  = new Size(contextSetup.PageWidth, contextSetup.PageHeight);
            _queue = new InputBufferQueue("WebBrowserQueue", _streamer, MaxPackets, setup.Dx, contextSetup.PageWidth, contextSetup.PageHeight);

            CefServer.EnsureInit(new CefConfiguration
            {
                CachePathRoot    = Path.Combine(contextSetup.BaseFolder, "cache"),
                CachePathRequest = Path.Combine(contextSetup.BaseFolder, "cache\\request"),
                CachePathGlobal  = Path.Combine(contextSetup.BaseFolder, "cache\\global"),
                LogVerbose       = false,
                LogFile          = Path.Combine(contextSetup.BaseFolder, "wb.log")
            });

            if (_cefBrowser == null)
            {
                _cefBrowser = CefServer.CreateBrowser(setup.Input, contextSetup.Fps, this);
            }
            else
            {
                _cefBrowser.Load(setup.Input);
            }

            Config = new InputConfig(
                new InputStreamProperties[]
            {
                new InputStreamProperties
                {
                    CodecProps = new CodecProperties
                    {
                        codec_type            = AVMediaType.AVMEDIA_TYPE_VIDEO,
                        codec_id              = Core.Const.CODEC_ID_RAWVIDEO,
                        width                 = _size.Width,
                        height                = _size.Height,
                        bits_per_coded_sample = 4 * 8,
                        format                = setup.Dx == null ?  Core.Const.PIX_FMT_BGRA : Core.PIX_FMT_INTERNAL_DIRECTX,

                        extradata = new byte[1024]
                    }
                }
            }
                );
        }
 protected override void OnWebSocketConnected(CefServer server, int connectionId)
 {
     if (this.webCallbacks["onWebSocketConnected"] != null)
     {
         try
         {
             var _callback = this.webCallbacks["onWebSocketConnected"];
             new Task(() =>
             {
                 _callback.Context.Enter();
                 _callback.Runner.PostTask(new CallbackTask(_callback.Context, _callback.Callback, connectionId));
                 _callback.Context.Exit();
             }).Start();
         }
         catch (Exception ex) { Log.Trace(ex.Message, ex.StackTrace, true); }
     }
     if (onWebSocketConnected != null)
     {
         onWebSocketConnected(this, new OnWebSocketConnectedEventArgs(server, connectionId));
     }
 }
示例#22
0
 public override void OnHttpRequest(CefServer server, int connectionId, string clientAddress, CefRequest request)
 {
     _implementation.OnHttpRequest(server, connectionId, clientAddress, request);
 }
示例#23
0
 /// <summary>
 /// The on web socket connected.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 /// <param name="connectionId">
 /// The connection id.
 /// </param>
 protected override void OnWebSocketConnected(CefServer server, int connectionId)
 {
 }
示例#24
0
 /// <summary>
 /// The on http request.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 /// <param name="connectionId">
 /// The connection id.
 /// </param>
 /// <param name="clientAddress">
 /// The client address.
 /// </param>
 /// <param name="request">
 /// The request.
 /// </param>
 protected override void OnHttpRequest(CefServer server, int connectionId, string clientAddress, CefRequest request)
 {
 }
示例#25
0
 /// <summary>
 /// The on client disconnected.
 /// </summary>
 /// <param name="server">
 /// The server.
 /// </param>
 /// <param name="connectionId">
 /// The connection id.
 /// </param>
 protected override void OnClientDisconnected(CefServer server, int connectionId)
 {
 }
示例#26
0
 public OnServerCreatedEventArgs(CefServer server)
     : base(server)
 {
 }
示例#27
0
 public override void OnWebSocketConnected(CefServer server, int connectionId)
 {
     _implementation.OnWebSocketConnected(server, connectionId);
 }
示例#28
0
 public override void OnClientDisconnected(CefServer server, int connectionId)
 {
     _implementation.OnClientDisconnected(server, connectionId);
 }
 public static void Shutdown()
 {
     PluginContextSetup.Unload();
     CefServer.Shutdown();
 }
示例#30
0
 public override void OnWebSocketRequest(CefServer server, int connectionId, string clientAddress, CefRequest request, CefCallback callback)
 {
     _implementation.OnWebSocketRequest(server, connectionId, clientAddress, request, callback);
 }