Пример #1
0
 public CommandReplicas(string command, View v, TupleSpace ts, Uri add, int id)
 {
     cmd        = command;
     payload    = new object[] { v, ts };
     Sender_uri = add;
     Sender_id  = id;
 }
Пример #2
0
        public static void CheckCommandsInQueue_thread_Replica()
        {
            while (true)
            {
                Thread.Sleep(50);                            //Min time to check commands
                if (CommLayer_forReplica.GetQueueSize() > 0) //if there is commands
                {
                    CommandReplicas cmd = CommLayer_forReplica.RemoveFromCommandQueue();
                    //MyTuple payload = (MyTuple)cmd.GetPayload();
                    //Object tmp;

                    switch (cmd.GetCommand())
                    {
                    case "REQUEST_VIEW_AND_IMAGE":      //RECEBI UM PEDIDO
                        Console.WriteLine("-----REQUEST_VIEW_AND_IMAGE-----");

                        //Console.WriteLine("CURRENT VIEW1 ==> " + ServerProgram.GetCurrentViewID().ToString());
                        //Console.WriteLine("CURRENT IMAGE ==> " + ts.ToString());
                        GiveBackResultToReplica(cmd.GetURI(), new CommandReplicas("RECEIVE_VIEW_AND_IMAGE", ServerProgram.GetCurrentViewID(), ts, ServerProgram.GetMyAddress(), ServerProgram.GetMyId()));      //ENVIO O ACK
                        Console.WriteLine("olaaa");
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_UPDATE_VIEW);

                        break;

                    case "RECEIVE_VIEW_AND_IMAGE":      //RECEBI UM AKC

                        Console.WriteLine("-----RECEIVE_VIEW_AND_IMAGE----");

                        ServerProgram.SetCurrentViewID(cmd.GetProposedView()); //View update
                        ts = cmd.GetTSS();                                     //tuple space update
                        Console.WriteLine("VIEW RECEBIDA1 ==> " + cmd.GetProposedView().ToString());
                        Console.WriteLine("IMAGEM RECEBIDA1 ==> " + ts.ToString());
                        ServerProgram.wait = false;
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_RESTART);

                        break;

                    case "REQUEST_VIEW":
                        Console.WriteLine("-----REQUEST_VIEW-----");           //RECEBI UM PEDIDO

                        //Console.WriteLine("CURRENT VIEW2 ==> " + ServerProgram.GetCurrentViewID().ToString());

                        GiveBackResultToReplica(cmd.GetURI(), new CommandReplicas("RECEIVE_VIEW", ServerProgram.GetCurrentViewID(), null, ServerProgram.GetMyAddress(), ServerProgram.GetMyId()));      //ENVIO O ACK
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_WAIT);
                        break;

                    case "RECEIVE_VIEW":        //RECEBI UM AKC

                        Console.WriteLine("-----RECEIVE_VIEW-----");

                        if (cmd.GetURI().AbsolutePath == ServerProgram.RootServer.UID.AbsolutePath)
                        {
                            ServerProgram.root_view = cmd.GetProposedView();
                            //Console.WriteLine("Recebi a view do root ---> " + ServerProgram.root_view.ToString());
                        }
                        ServerProgram.Proposed_Views.Add(cmd.GetProposedView());
                        //Console.WriteLine("VIEW RECEBIDA2 ==> " + cmd.GetProposedView().ToString());
                        ServerProgram.wait = false;
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_CHECK_VIEW);
                        break;

                    case "UPDATE_VIEW":         //RECEBI UM PEDIDO DO ROOT PARA FAZER UPDATE DA VIEW
                        Console.WriteLine("-----UPDATE_VIEW-----");

                        ServerProgram.SetCurrentViewID(cmd.GetProposedView());     //View update
                        //Console.WriteLine("NOVA VIEW ==> " + ServerProgram.GetCurrentViewID().ToString());

                        GiveBackResultToReplica(cmd.GetURI(), new CommandReplicas("ACK_UPDATE_VIEW", ServerProgram.GetCurrentViewID(), null, ServerProgram.GetMyAddress(), ServerProgram.GetMyId()));      //ENVIO O ACK
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_WAIT);
                        break;

                    case "ACK_UPDATE_VIEW":
                        Console.WriteLine("-----ACK_UPDATE_VIEW-----");           //RECEBI ACK DE CONFIRMAÇÃO DA ALTERAÇÃO DA VIEW
                        ServerProgram.wait = false;
                        ServerProgram.SetStateMachine(ServerProgram.STATE_MACHINE_NETWORK_RESTART);

                        break;
                    }
                }
            }
        }
Пример #3
0
 public static void SetTupleSpace(Object img)
 {
     ts = (TupleSpace)img;
 }