Ejemplo n.º 1
0
        /// <summary>
        /// Performs all socket listening actions.
        /// </summary>
        private void Listen()
        {
            try
            {
                while (true)
                {
                    if (!sck.Connected)
                    {
                        throw new SocketException(10054);
                    }

                    localBuffer = new byte[sck.SendBufferSize];

                    int bytesRead = sck.Receive(localBuffer, sck.SendBufferSize, SocketFlags.None);

                    if (bytesRead == 0)
                    {
                        Connected = false;
                        Debug.WriteLine("Server disconnected. Closing socket...");
                        sck.Close();
                        Debug.WriteLine("Socket closed. Successfully disconnected from server.");
                        tsslStatus.Text = "Disconnected from receiver.";
                    }


                    /** Format buffer to take care of whitespace or extra crap*/
                    List <byte> formatted = new List <byte>(bytesRead);
                    for (int i = 0; i < bytesRead; i++)
                    {
                        if (localBuffer[i] != default(byte))
                        {
                            formatted.Add(localBuffer[i]);
                        }
                    }

                    string strData = Encoding.ASCII.GetString(formatted.ToArray()).Trim();
                    if (string.IsNullOrWhiteSpace(strData))
                    {
                        continue;
                    }
                    List <string> toks     = strData.Split(' ').ToList();
                    string        protocol = toks[0];

                    if (Numerics.ContainsKey(protocol))
                    {
                        Numerics[protocol](toks);
                    }
                    else
                    {
                        Debug.WriteLine("Server sent erroneous protocol. Message was '" + strData + "'");
                    }
                }
            }
            catch (SocketException error)
            {
                Debug.WriteLine("Socket error: " + error.Message);
                tsslStatus.Text = "Disconnected from receiver.";
            }
        }