Exemple #1
0
 public void addItem(object o)
 {
     if (this.lstOPNames.InvokeRequired)
     {
         SetListAddCallback d = new SetListAddCallback(addItem);
         this.Invoke(d, new object[] { o });
     }
     else
     {
         lstOPNames.Items.Add(o);
     }
 }
        private void ListenForServer(object client)
        {
            TcpClient tcpClient = (TcpClient)client;
            NetworkStream clientStream = tcpClient.GetStream();
            SetTextCallback d = new SetTextCallback(Settext);
            SetListAddCallback listAdd = new SetListAddCallback(AddList);
            SetListRemoveCallback listRemove = new SetListRemoveCallback(RemoveList);
            //buffer = encoding.GetBytes("");

            byte[] message = new byte[65535];
            byte[] message2 = new byte[2];
            int bytesRead = 0;
              //  I realize this is a mess, I dont care
            string text = "";
            int length = 0;
            int length2 = 0;
            int offset = 0;
            int i = 0;
            int ID = 0;
            int LOGGEDIN = 0;
            int value = 0;

            bool firstlogin = true;
            while (true)
            {

                try
                {
                    Array.Clear(message, 0, message.Length);
                   // firstlogin = false;

                    if (firstlogin == true)
                    {
                        bytesRead = clientStream.Read(message, 0, 1);
                        bytesRead = clientStream.Read(message2, 0, 1);
                        length = ((int)message[0] << 8) | (int)message2[0];//LENGTH OF DATA
                      //  bytesRead = clientStream.Read(message, 0, 2);
                       // length = message[0];
                        bytesRead = clientStream.Read(message, 0, length);

                            for (i = 0; i <= length + 1; i++)
                            {
                                text += (char)message[i];
                            }

                            this.Invoke(d, new object[] { text });
                            firstlogin = false;
                            text = "";
                    }
                    else
                    {
                        //AFTER INITIAL LOGIN SERVER WILL SEND 2 BYTES (LENGTH), then the message!

                        bytesRead = clientStream.Read(message, 0, 1);
                        bytesRead = clientStream.Read(message2, 0, 1);
                        length = ((int)message[0]<<8) | (int)message2[0];//LENGTH OF DATA
                        //string text2 = encoding.GetString(message, 0, bytesRead);
                        Thread.Sleep(100);
                        if (length == 0)
                        {//PING?
                            //this.Invoke(d, new object[] {DateTime.Now.ToString("HH:mm:ss tt") +  " : --PING!-- "});
                        }
                        else
                        {
                            bytesRead = clientStream.Read(message, 0, 1);
                            bytesRead = clientStream.Read(message2, 0, 1);
                            length2 = ((int)message[0] << 8) | (int)message2[0];//LENGTH OF MESSAGE
                            bytesRead = clientStream.Read(message, 0, length-2);//full message
                            //text2 = encoding.GetString(message, 0, bytesRead);
                            offset = 4;
                            while (offset <= bytesRead)
                            {
                                ID = message[offset - 2];//ID OF USER, need to be used to create a list of users
                                LOGGEDIN = message[offset - 4];//IF LOGGED IN OR NOT (ONLY USEFUL WHEN GRABBING ID LIST ON FIRST LOG, OR IF SOMEONE LOGS IN OR OUT)
                                //0 on message, 1 on login, 2 on logout
                                value = message[offset-1];//LENGTH OF NAME BEFORE TEXT, ONLY USEFUL ON FIRST LOGIN.

                               // else
                               // {
                                    //TEXT
                                    for (i = offset; i <= length2 - 1; i++)
                                    {
                                    text += (char)message[i];
                                    }
                                    if (value > 0)
                                    {text = text.Insert(value, ">");}

                                    if (LOGGEDIN == 1)
                                    {//LOGGED IN
                                        this.Invoke(listAdd, new object[] { text, ID.ToString() });
                                    }
                                    else if (LOGGEDIN == 2)
                                    {//LOGGED OUT
                                        this.Invoke(listRemove, new object[] { text, ID.ToString() });
                                    }
                                    else
                                    {//LOGGED OUT

                                      //  this.Invoke(d, new object[] { text });
                                        int ndx = UserID.FindIndex(s => s == ID.ToString());

                                        //int Name = UserName.IndexOf(ndx);
                                        //  UserName.Find(b => b.Property == value);
                                        if (ndx == -1)
                                        {
                                            this.Invoke(d, new object[] { text });
                                        }
                                        else
                                        {
                                            string Name = UserName[ndx];
                                             text = text.Insert(0, Name + ">");
                                             this.Invoke(d, new object[] { text });
                                        }
                                    }

                                text = "";
                                offset = (i + 6);
                                length2 = message[i + 1] + (offset - 4);
                               // }
                            }
                        }

                    }

                }
                catch
                {
                  //  richTextBox1.Text += "Some Error";
                    break;

                }
                if (bytesRead == 0)
                {
                   // this.closeRequested = true;

                   this.Invoke(d, new object[] { "***SERVER HAS DROPPED*** \r\n" });
                    MessageBox.Show("***SERVER HAS DROPPED***", "No Connection!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    break;
                  //  return;
                }

            }
            Disconnect();
              //  message = encoding.GetBytes("");
              //  clientStream.Flush();
            clientStream.Close();
            tcpClient.Close();
            //System.Console.Write("---the client has disconnected from the server---");
        }