コード例 #1
0
        public void TestTokenMessage()
        {
            TokenMessage msg = new TokenMessage();
            msg.EncodeHiddenComm("A", "B");
            TokenMessage msgTwo = new TokenMessage();

            msgTwo.Decode(msg.ToSend);
            CompareTokenMessages(msg, msgTwo);

            msg.EncodeMessage("C", "D", "hello!! :D |");
            msgTwo.Decode(msg.ToSend);
            CompareTokenMessages(msg, msgTwo);
        }
コード例 #2
0
        /// <summary>
        /// The instance so that we can send a message or token.
        /// </summary>
        private void sender()
        {
            int numConnected = 0;
            while (numConnected != this.nodeCount)
            {
                lock (this.nodes)
                {
                    numConnected = this.nodes.Count;
                }
                Thread.Sleep(100);
            }

            TokenMessage msg = new TokenMessage();
            msg.EncodeHiddenComm(GlobalConst.serverName, GlobalConst.serverName);

            lock (this.nodes)
            {
                NetworkStream stream = this.nodes.First().GetStream();
            }
            //Need to check the index
            curIndex = 0;
            this.tokenCount++;
            lock (stopwatch)
            {
                stopwatch.Start();
            }

            //Send first token
            //Set a stopwatch and then use that stopwatch here.
            //Every time ANY tcpclient receives something, reset stopwatch.
            //If the stopwatch runs out, resend token ad infinitum until SOMETHING tells it to stop
            //That something is up to you.
            while (!interrupted)
            {
                TcpClient client = null;
                lock(this.nodes)
                {
                    client = this.nodes[curIndex];
                }
                actuallySend(client, msg);
                while (stopwatch.Elapsed.TotalSeconds < 5)
                {
                    Thread.Sleep(2500);
                    if(!stopwatch.IsRunning)
                    {
                        stopwatch.Start();
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Tokens the listening.
        /// </summary>
        private void TokenListening()
        {
            int bytesRead = 0;
            int countTimesSent = 0;
            byte[] message;
            NetworkStream stream = this.client.GetStream();
            TokenMessage token = new TokenMessage(); //Whenever we receive something, we ALWAYS send something back.

            while (true)
            {
                bytesRead = 0;
                message = GlobalConst.getSpaceByteArray(GlobalConst.BUFSIZE);

                try
                {
                    bytesRead = stream.Read(message, 0, GlobalConst.BUFSIZE);
                }
                catch
                {
                    //socket error. WTF.
                    break;
                }

                if(bytesRead == 0)
                {
                    break;
                }

                TokenMessage msg = new TokenMessage();
                bool msgOK = msg.Decode(message);

                if(msg.Token)
                {

                    //Console.WriteLine("Got token on Node " + this.parentNode.Name);
                    this.hasToken = true;

                    if (this.senderThread.ThreadState.Equals(ThreadState.Stopped))
                    {
                        UseDelegate(stream, msg);
                    }
                    else
                    {
                        while (this.SenderThread.ThreadState.Equals(ThreadState.WaitSleepJoin) == false)
                        {
                            Thread.Sleep(50);
                        }

                        this.SenderThread.Interrupt();
                    }

                }
                else if (!msgOK)
                {

                    Console.WriteLine("Got a bad message on Node " + this.parentNode.Name);
                }
                else
                {

                    //Console.WriteLine("Got message on Node {0} ", this.parentNode.Name);
                    if (msg.Sender.Equals(this.parentNode.Name))
                    {
                        if (msg.FS == '1' || countTimesSent > 3)
                        {
                            this.toSend.Dequeue();
                            token.EncodeHiddenComm(GlobalConst.serverName, GlobalConst.serverName);
                            this.hasToken = false;
                            while (!this.senderThread.ThreadState.Equals(ThreadState.WaitSleepJoin))
                            {
                                Thread.Sleep(50);
                            }
                            this.SenderThread.Interrupt();
                        }
                        else
                        {
                            countTimesSent++;
                            token = msg;
                        }
                    }
                    else if (msg.Destination.Equals(this.parentNode.Name))
                    {
                        this.parentNode.writeOutMessage(msg);
                        token = msg;
                        token.FS = '1';
                    }
                    else
                    {
                        token = msg;
                    }

                    UseDelegate(stream, token);
                }
            }

            this.doneReceiving = true;
            if(!this.doneSending)
            {
                SenderThread.Abort();
            }

            while (!this.parentThread.ThreadState.Equals(ThreadState.WaitSleepJoin))
            {
                Thread.Sleep(100);
            }

            this.parentThread.Interrupt();
        }