/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using Document = Lucene.Net.Documents.Document;
using Term = Lucene.Net.Index.Term;
namespace Lucene.Net.Search
{
/// A remote searchable implementation.
[Serializable]
public class RemoteSearchable : System.MarshalByRefObject, Lucene.Net.Search.Searchable
{
private Lucene.Net.Search.Searchable local;
/// Constructs and exports a remote searcher.
public RemoteSearchable(Lucene.Net.Search.Searchable local) : base()
{
this.local = local;
}
public virtual void Search(Query query, Filter filter, HitCollector results)
{
local.Search(query, filter, results);
}
public virtual void Search(Weight weight, Filter filter, HitCollector results)
{
local.Search(weight, filter, results);
}
public virtual void Close()
{
local.Close();
}
public virtual int DocFreq(Term term)
{
return local.DocFreq(term);
}
public virtual int[] DocFreqs(Term[] terms)
{
return local.DocFreqs(terms);
}
public virtual int MaxDoc()
{
return local.MaxDoc();
}
public virtual TopDocs Search(Query query, Filter filter, int n)
{
return local.Search(query, filter, n);
}
public virtual TopDocs Search(Weight weight, Filter filter, int n)
{
return local.Search(weight, filter, n);
}
public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sort sort)
{
return local.Search(query, filter, n, sort);
}
public virtual TopFieldDocs Search(Weight weight, Filter filter, int n, Sort sort)
{
return local.Search(weight, filter, n, sort);
}
public virtual Document Doc(int i)
{
return local.Doc(i);
}
public virtual Query Rewrite(Query original)
{
return local.Rewrite(original);
}
public virtual Explanation Explain(Query query, int doc)
{
return local.Explain(query, doc);
}
public virtual Explanation Explain(Weight weight, int doc)
{
return local.Explain(weight, doc);
}
/// Exports a searcher for the index in args[0] named
/// "//localhost/Searchable".
///
[STAThread]
public static void Main(System.String[] args)
{
System.Runtime.Remoting.RemotingConfiguration.Configure("Lucene.Net.Search.RemoteSearchable.config");
System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpChannel(1099));
// create and install a security manager
if (false) //{{}}// if (System.getSecurityManager() == null) // {{Aroush-1.4.3}} >> 'java.lang.System.getSecurityManager()'
{
//{{}}// System.setSecurityManager(new RMISecurityManager()); // {{Aroush-1.4.3}} >> 'java.lang.System.setSecurityManager()' and 'java.rmi.RMISecurityManager.RMISecurityManager()'
}
Lucene.Net.Search.Searchable local = new IndexSearcher(args[0]);
RemoteSearchable impl = new RemoteSearchable(local);
// bind the implementation to "Searchable"
System.Runtime.Remoting.RemotingServices.Marshal(impl, "tcp://localhost:1099/Searchable");
System.Console.ReadLine();
}
}
}