/// <summary>
 /// Determines whether the specified <c>sockets</c> satisfy 
 /// the condition on required sockets (<c>neededSockets</c>) 
 /// i.e. if there are sockets of the same name and the same type 
 /// (<see cref="F:Ferda.Modules.Serializer.BoxSerializer.NeededSocket.FunctionIceId"/>)
 /// as required.
 /// </summary>
 /// <param name="neededSockets">The needed sockets.</param>
 /// <param name="sockets">The sockets.</param>
 /// <returns>
 /// <c>true</c> if the specified <c>sockets</c>satisfy 
 /// <c>neededSockets</c> restrictions; otherwise, <c>false</c>.
 /// </returns>
 private static bool hasSockets(NeededSocket[] neededSockets, SocketInfo[] sockets)
 {
     // creates dictionary of sockets
     Dictionary<string, SocketInfo> socketsDict = new Dictionary<string, SocketInfo>();
     foreach (SocketInfo socket in sockets)
     {
         socketsDict[socket.name] = socket;
     }
     // tests if each needed socket is present and implements required interface
     foreach (NeededSocket socketNeeded in neededSockets)
     {
         // tests if needed socket is present
         SocketInfo socketInfo;
         if (!socketsDict.TryGetValue(socketNeeded.socketName, out socketInfo))
         {
             // needed socket is not present
             return false;
         }
         // tests if the socket has needed boxtype
         BoxType[] boxTypeSeq = socketInfo.socketType;
         bool finded = false;
         foreach (BoxType boxType in boxTypeSeq)
         {
             if (boxType.functionIceId == socketNeeded.functionIceId)
             {
                 // the socket has needed boxtype
                 finded = true;
                 break;
             }
         }
         // the socket has not needed boxtype
         if (!finded)
             return false;
     }
     return true;
 }
 protected bool hasSockets(NeededSocket[] neededSockets)
 {
     Dictionary<string,SocketInfo> socketsDict = new Dictionary<string,SocketInfo>();
     foreach (SocketInfo socket in Sockets)
     {
         socketsDict[socket.name] = socket;
     }
     foreach (NeededSocket socketNeeded in neededSockets)
     {
         SocketInfo sockNfo;
         if(!socketsDict.TryGetValue(socketNeeded.socketName,out sockNfo))
         {
             return false;
         }
         BoxType[] boxTypeSeq = sockNfo.socketType;
         bool finded = false;
         foreach (BoxType boxType in boxTypeSeq)
         {
             if (boxType.functionIceId == socketNeeded.functionIceId)
             {
                 finded = true;
                 break;
             }
         }
         if (!finded) return false;
     }
     return true;
 }
 private bool hasSockets(NeededSocket[] neededSockets, BoxModuleFactoryCreatorPrx creator)
 {
     Dictionary<string,SocketInfo> socketsDict = new Dictionary<string,SocketInfo>();
     BoxModuleFactoryPrx factory = creator.createBoxModuleFactory(
         helper.LocalePrefs,
         helper.ManagersEnginePrx);
     SocketInfo[] sockets = factory.getSockets();
     factory.destroy();
     foreach (SocketInfo socket in sockets)
     {
         socketsDict[socket.name] = socket;
     }
     foreach (NeededSocket socketNeeded in neededSockets)
     {
         SocketInfo sockNfo;
         if (!socketsDict.TryGetValue(socketNeeded.socketName, out sockNfo))
             return false;
         BoxType[] boxTypeSeq = sockNfo.socketType;
         bool finded = false;
         foreach (BoxType boxType in boxTypeSeq)
         {
             if (boxType.functionIceId == socketNeeded.functionIceId)
             {
                 finded = true;
                 break;
             }
         }
         if (!finded) return false;
     }
     return true;
 }