Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using AC;
- public AC.Automata aca1;
- public AC.Automata aca2;
- public int trigger = 0;
- public ulong total_strings = 0;
- public string? foundList;
- public bool prepare () {
- stdout.printf("Start rebuild: %d\n", trigger);
- string line;
- string[]? ary;
- int i = 0;
- var file = File.new_for_path ("/home/ava/tmp/import/pr_list.out");
- var dos = new DataInputStream (file.read ());
- while ((line = dos.read_line (null)) != null) {
- line.chomp();
- ary = line.down().split("||");
- if ( ary != null )
- {
- i++;
- var str = AC.String () {
- id = int.parse (ary[1]),
- str = ary[0],
- length = ary[0].length
- };
- if (trigger == 0)
- aca1.add_string (str);
- else
- aca2.add_string (str);
- }
- };
- dos.close();
- if (trigger == 0) {
- aca1.build();
- total_strings = aca1.total_strings;
- trigger = 1;
- aca2.reset();
- }
- else {
- aca2.build();
- total_strings = aca2.total_strings;
- trigger = 0;
- aca1.reset();
- };
- stdout.printf("End rebuild\n");
- return true;
- }
- public static int match_handler (Match m, void * param)
- {
- uint j;
- for (j=0; j < m.match_num; j++)
- {
- if (foundList.length > 0)
- foundList += ",";
- foundList += m.matched_strings[j].id.to_string();
- }
- return 0;
- }
- public void * start () {
- try {
- var srv = new SocketService ();
- srv.add_inet_port (4801, null);
- srv.incoming.connect (on_incoming_connection);
- srv.start ();
- } catch (GLib.Error e) {
- stderr.printf ("%s\n", e.message);
- }
- return null;
- }
- bool on_incoming_connection (SocketConnection conn) {
- process_request.begin (conn);
- return true;
- }
- async void process_request (SocketConnection conn) {
- try {
- if (total_strings > 0)
- {
- var dis = new DataInputStream (conn.input_stream);
- var dos = new DataOutputStream (conn.output_stream);
- string req = yield dis.read_line_async (Priority.HIGH_IDLE);
- stderr.printf("rec: %s\n", req);
- if (req != "" && req.length >= 4) {
- foundList = "";
- var str = AC.String () {
- str = req,
- length = req.length
- };
- stdout.printf("sea: %s\n", req);
- if (trigger == 0)
- aca2.search (str, null);
- else
- aca1.search (str, null);
- dos.put_string (foundList);
- }
- }
- } catch (GLib.Error e) {
- stderr.printf ("%s\n", e.message);
- }
- }
- public void * update () {
- Timeout.add_seconds (25, prepare);
- return null;
- }
- void main (string[] args)
- {
- aca1 = AC.Automata (match_handler);
- aca2 = AC.Automata (match_handler);
- try {
- Thread.create<void*> (update, false);
- Thread.create<void*> (start, false);
- } catch (ThreadError e) {
- stderr.printf ("%s\n", e.message);
- };
- new MainLoop ().run ();
- }
Add Comment
Please, Sign In to add comment