Ejemplo n.º 1
0
        void process_client()
        {
            TcpClient     mClient = client;
            NetworkStream stream  = mClient.GetStream();

            Status = "Connected to a client\n";
            BinaryReader reader = new BinaryReader(stream);
            int          option = reader.ReadInt32();

            if (option == 99)
            {
                CA = reader.ReadString();
                return;
            }

            clients.Add(mClient);

            SomeData itm = null;

            if (option == 1)
            {
                itm = new SomeData();
                int len = reader.ReadInt32();
                itm = (SomeData)Helper.deSerilize(reader.ReadBytes(len));
                data.Add(itm);
            }


            ShowData();
            //listen for messages
            while (mClient.Connected)
            {
                try
                {
                    option = reader.ReadInt32();

                    if (option == 2)
                    {
                        byte[] b = Helper.getBytes("lst");
                        mClient.Client.Send(b);
                        Server.SendToClient(mClient, data);
                    }

                    else if (option == 3)
                    {
                        int recever = reader.ReadInt32();

                        int dataLen = reader.ReadInt32();

                        byte[] msg = reader.ReadBytes(dataLen);

                        TcpClient reciever = clients[recever];

                        NetworkStream rec = reciever.GetStream();

                        reciever.Client.Send(Helper.getBytes("msg"));


                        BinaryWriter recW = new BinaryWriter(rec);

                        recW.Write(itm.username);

                        recW.Write(msg.Length);
                        recW.Write(msg);
                        recW.Flush();
                    }
                    else if (option == 4)
                    {
                        int ix = clients.IndexOf(mClient);
                        clients.RemoveAt(ix);
                        data.RemoveAt(ix);
                        mClient.Close();
                    }
                }
                catch
                {
                    continue;
                }
            }
        }