コード例 #1
0
        /// <summary>
        /// The start server.
        /// </summary>
        /// <param name="address">
        /// The address.
        /// </param>
        /// <param name="port">
        /// The port.
        /// </param>
        public static void StartServer(string address, int port)
        {
            try
            {
                Address = address;
                Port    = port;

                if (port < 8000 || port > 65535)
                {
                    string errorMessage = $"Invalid port number: {port} specified. Port number must be between 8000 and 65535";
                    Log.Error(errorMessage);
                    return;
                }

                var sockeHandler = IoC.GetInstance <IChromelyWebsocketHandler>(typeof(IChromelyWebsocketHandler).FullName)
                                   ?? new CefGlueWebsocketHandler();

                ConnectionNameMapper.Clear();
                mServerHandler = new CefGlueServerHandler(sockeHandler);
                mServerHandler.StartServer(Address, Port, OnStartServerComplete);
            }
            catch (Exception exception)
            {
                Log.Error(exception);
            }
        }
コード例 #2
0
        /// <summary>
        /// The send message.
        /// </summary>
        /// <param name="clientName">
        /// The client name.
        /// </param>
        /// <param name="data">
        /// The data.
        /// </param>
        private static void SendMessage(string clientName, string data)
        {
            Task.Run(() =>
            {
                IntPtr outIntPtr = IntPtr.Zero;

                try
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        return;
                    }

                    int connectionId = ConnectionNameMapper.GetConnectionId(clientName);

                    if (connectionId == 0)
                    {
                        return;
                    }

                    if (Server == null)
                    {
                        return;
                    }

                    byte[] outputByte = Encoding.UTF8.GetBytes(data);

                    outIntPtr = Marshal.AllocHGlobal(outputByte.Length);
                    Marshal.Copy(outputByte, 0, outIntPtr, outputByte.Length);

                    Server.SendWebSocketMessage(connectionId, outIntPtr, outputByte.Length);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }
                finally
                {
                    // Free the unmanaged memory.
                    Marshal.FreeHGlobal(outIntPtr);
                }
            });
        }
コード例 #3
0
        /// <summary>
        /// The start receiving from server.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        private ChromelyResponse StartReceivingFromServer(ChromelyRequest request)
        {
            var clientname = request.PostData?.ToString() ?? string.Empty;

            mReceiverConnectionId = ConnectionNameMapper.GetConnectionId(clientname);
            if (!mReceiveFromServer)
            {
                mReceiveFromServer = true;
                SendMessagesToClient();
            }

            return(new ChromelyResponse(request.Id)
            {
                ReadyState = (int)ReadyState.ResponseIsReady,
                Status = (int)System.Net.HttpStatusCode.OK,
                StatusText = "OK",
                Data = "OK"
            });
        }
        /// <summary>
        /// The start receiving from server.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="ChromelyResponse"/>.
        /// </returns>
        private ChromelyResponse StartReceivingFromServer(ChromelyRequest request)
        {
            string clientname = request.PostData?.ToString() ?? string.Empty;

            this.mReceiverConnectionId = ConnectionNameMapper.GetConnectionId(clientname);
            if (!this.mReceiveFromServer)
            {
                this.mReceiveFromServer = true;
                this.SendMessagesToClient();
            }

            ChromelyResponse response = new ChromelyResponse(request.Id);

            response.ReadyState = (int)ReadyState.ResponseIsReady;
            response.Status     = (int)System.Net.HttpStatusCode.OK;
            response.StatusText = "OK";
            response.Data       = "OK";
            return(response);
        }