Ejemplo n.º 1
0
        /// <summary>
        /// Sends a message to all connected clients.
        /// </summary>
        /// <param name="message">Message container containing everything related to the message.</param>
        /// <returns>True on success.</returns>
        public async Task <bool> SendMessage(WebSocketMessageContainer message)
        {
            bool succes = false;

            foreach (var connection in _ListWithConnections)
            {
                succes = await connection.Value.SendMessageAsync(message);
            }

            return(succes);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Send a message to a specific client.
        /// </summary>
        /// <param name="message">Message container containing everything related to the message.</param>
        /// <param name="clientId">Id of the client to send the message to.</param>
        /// <returns>True on success.</returns>
        public async Task <bool> SendMessage(WebSocketMessageContainer message, string clientId)
        {
            foreach (var connection in _ListWithConnections)
            {
                if (connection.Key.clientId == clientId)
                {
                    return(await connection.Value.SendMessageAsync(message));
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Stops the websocket server and sends over a reason asynchronous.
        /// </summary>
        /// <param name="reason">Overload parameter for reason. </param>
        /// <returns>True on success.</returns>
        public async Task <bool> StopServerAsync(string reason = "Server closed connection.")
        {
            WebSocketMessageContainer message = new WebSocketMessageContainer()
            {
                data     = Encoding.UTF8.GetBytes(reason),
                isClosed = true
            };
            bool succes = await SendMessageAsync(message);

            if (succes)
            {
                _ClientInfo.client.Close();
                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Sends a websocket framed message to the client synchronous.
        /// </summary>
        /// <param name="message">Message container containing all the information needed for the message.</param>
        /// <returns>True on success.</returns>
        public bool SendMessage(WebSocketMessageContainer message)
        {
            if (_ClientInfo.client.Connected)
            {
                NetworkStream stream = _ClientInfo.client.GetStream();

                if (stream.CanWrite)
                {
                    UInt64 messageLength = (ulong)message.data.Length;

                    List <byte> websocketFrame = new List <byte>();


                    byte start = 0x00;

                    if (message.isText)
                    {
                        start = 0x81;
                    }
                    if (message.isBinary)
                    {
                        start = 0x82;
                    }
                    if (message.isClosed)
                    {
                        start = 0x88;
                    }
                    if (message.isPing)
                    {
                        start = 0x89;
                    }
                    if (message.isPong)
                    {
                        start = 0x8A;
                    }

                    websocketFrame.Add(start);

                    if (messageLength <= 125)
                    {
                        websocketFrame.Add((byte)messageLength);
                        websocketFrame.AddRange(message.data);
                    }
                    else if (messageLength > 125 && messageLength <= 65535)
                    {
                        UInt16 messageLength16bit = (UInt16)messageLength;
                        byte[] byteArray          = BitConverter.GetBytes(messageLength16bit).Reverse <byte>().ToArray();

                        websocketFrame.Add((byte)126);
                        websocketFrame.AddRange(byteArray);
                        websocketFrame.AddRange(message.data);
                    }
                    else
                    {
                        byte[] byteArray = BitConverter.GetBytes(messageLength).Reverse <byte>().ToArray();
                        websocketFrame.Add((byte)127);
                        websocketFrame.AddRange(byteArray);
                        websocketFrame.AddRange(message.data);
                    }
                    stream.Write(websocketFrame.ToArray(), 0, websocketFrame.ToArray().Length);
                    stream.Flush();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }