示例#1
0
 public IPadInt CreatePadInt(int uid)
 {
     try {
         Console.WriteLine("[CREATE] Client wants to create PadInt with id " + uid);
         if (!padInts.Contains(uid))
         {
             if (dataServers.Count == 0)
             {
                 Console.WriteLine("[!CREATE] Error: There are no available DataServers");
                 Console.WriteLine("---");
                 return(null);
             }
             DataServerInfo dServer = (DataServerInfo)dataServers[indexLastServer];
             while (dServer.remoteServer.isFail)
             {
                 Console.WriteLine("[CREATE] DataServer " + dServer.Name /*dServer.remoteServer.name*/ + " is set to [Fail]: Passing his turn on Round Robin");
                 indexLastServer = (indexLastServer + 1) % dataServers.Count; // salta um índice
                 dServer         = (DataServerInfo)dataServers[indexLastServer];
             }
             IPadInt obj = dServer.remoteServer.store(uid);
             // obj nao vem nunca a null porque controlámos isso nos ifs anteriores...
             // Round Robin:
             indexLastServer = (indexLastServer + 1) % dataServers.Count;
             padInts.Add(uid, dServer);
             MyPadInt myPadInt = new MyPadInt(uid, obj);
             addPadInt(myPadInt);
             Console.WriteLine("[CREATE] PadInt " + uid + " stored on " + dServer.Name /*dServer.remoteServer.name*/);
             Console.WriteLine("---");
             return(obj);
         }
         else
         {
             Console.WriteLine("[!CREATE] Error: PadInt " + uid + " already exists.");
             Console.WriteLine("---");
             return(null);
         }
     } catch (RemotingException re) {
         Console.WriteLine("[CreatePadInt]:\n" + re);
         throw new OperationException("CreatePadInt operation at PadInt " + uid + "failed.");
     }
 }
示例#2
0
 public static PadInt CreatePadInt(int uid)
 {
     try {
         IPadInt obj = masterServer.CreatePadInt(uid);
         if (obj == null)
         {
             return(null);
         }
         else
         {
             PadInt localPadInt = new PadInt(uid, obj);
             return(localPadInt);
         }
     } catch (TxException re) {
         //Console.WriteLine("[CreatePadInt]: Cannot createPadInt with uid " + uid + "\n" + re);
         String text = "[CreatePadInt]: Cannot createPadInt with uid " + uid + "\n" + re;
         Console.WriteLine(text);
         //textBox.Invoke(new ClearTextDel(textBox.Clear));
         //textBox.Invoke(new UpdateTextDel(textBox.AppendText), new object[] { text });
         return(null);
     }
 }
示例#3
0
 // Se o server a que esse objecto pertence estiver em Freeze ou Fail, faz sentido
 // devolvermos o objecto em cache? Não estamos a violar o comportamento suposto?
 //
 // mais: ao devolver o url ao client, nao devemos tambem ir buscar o objecto e por na cache?
 //
 // Se a cache contem o PadInt
 //  retornamos PadInt
 // Caso contrario
 //  retornamos url
 public PadIntInfo AccessPadInt(int uid)
 {
     try {
         Console.WriteLine("[ACCESS] Client requests PadInt with id " + uid);
         if (padIntsCache.Contains(new MyPadInt(uid)))
         {
             int        index      = padIntsCache.IndexOf(new MyPadInt(uid));
             MyPadInt   myObj      = (MyPadInt)padIntsCache[index];
             IPadInt    obj        = myObj.PadInt;
             PadIntInfo padIntInfo = new PadIntInfo(obj);
             Console.WriteLine("[ACCESS] PadInt " + uid + " returned from the cache. ");
             Console.WriteLine("---");
             return(padIntInfo);
         }
         else if (padInts.Contains(uid))
         {
             DataServerInfo dServer    = (DataServerInfo)padInts[uid];
             PadIntInfo     padIntInfo = new PadIntInfo(dServer.URL);
             Console.WriteLine("[ACCESS] Returned " + dServer.Name /*dServer.remoteServer.name*/ + "'s URL, to further access PadInt " + uid + ".");
             Console.WriteLine("---");
             IPadInt  padInt   = dServer.remoteServer.load(uid);
             MyPadInt myPadInt = new MyPadInt(uid, padInt);
             addPadInt(myPadInt);
             return(padIntInfo);
         }
         else     //PadInt nao existe
         {
             Console.WriteLine("[!ACCESS] Error: PadInt " + uid + " does not exist.");
             Console.WriteLine("---");
             return(null);
         }
     } catch (RemotingException re) {
         Console.WriteLine("[AccessPadInt]:\n" + re);
         throw new OperationException("AccessPadInt operation at PadInt " + uid + "failed.");
     }
 }
示例#4
0
 public MyPadInt(int uid)
 {
     this.uid    = uid;
     this.padInt = null;
 }
示例#5
0
 public MyPadInt(int uid, IPadInt obj)
 {
     this.uid    = uid;
     this.padInt = obj;
 }
示例#6
0
 public PadInt(int uid, IPadInt remoteObj)
 {
     this.uid       = uid;
     this.remoteObj = remoteObj;
 }
示例#7
0
 public PadIntInfo(String serverUrl)
 {
     this.serverUrl = serverUrl;
     this.padInt    = null;
 }
示例#8
0
 public PadIntInfo(IPadInt padInt)
 {
     this.padInt    = padInt;
     this.serverUrl = null;
 }