/* * Copyright (C) 2010 Stanford University * * 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. */ package edu.stanford.junction.simulator; import org.json.JSONException; import org.json.JSONObject; import edu.stanford.junction.JunctionMaker; import edu.stanford.junction.api.activity.ActivityScript; import edu.stanford.junction.api.activity.JunctionActor; import edu.stanford.junction.api.messaging.MessageHeader; import edu.stanford.junction.provider.xmpp.XMPPSwitchboardConfig; class simThread extends Thread{ private int NumOfMessage; private int NumOfParticipant; private int sessionID; simThread(int NumMsg, int NumP, int id){ NumOfMessage = NumMsg; NumOfParticipant = NumP; sessionID = id; } public void run(){ ActivityScript desc = new ActivityScript(); //String ad = "SimSession_" + sessionID; //desc.setSessionID(ad); JSONObject platform = new JSONObject(); try{ platform.put("android", "http://my.realsitic.url/for_android"); desc.addRolePlatform("simulator", "android", platform); } catch (Exception e) {} XMPPSwitchboardConfig config = new XMPPSwitchboardConfig("prpl.stanford.edu"); JunctionMaker maker = JunctionMaker.getInstance(config); for(int actor_i = NumOfParticipant-1 ; actor_i >=0; actor_i --){ try{ maker.newJunction(desc, new SimActor(NumOfMessage, actor_i)); } catch(Exception e){ e.printStackTrace(System.err); } //maker.newJunction(desc, new SimActor(NumOfMessage, 0)); } } } public class Simulator { static int NumOfActivity = 1; static int NumOfMessage = 5; static int NumOfParticipant = 2; public static void main(String[] argv){ for(int i = 0; i< NumOfActivity; i++){ simThread st = new simThread(NumOfMessage, NumOfParticipant, i); st.start(); } while(true) { try { Thread.sleep(500000); } catch (Exception e) {} } } } class SimActor extends JunctionActor{ static Integer TotalMessage = 0; private int NumOfMessage; private int NumOfBouncedMessage = 0; private int ID; public SimActor(int numMsg, int _ID) { super("SimActor"+_ID); NumOfMessage = numMsg; if(NumOfMessage <= 0) NumOfMessage = 1; NumOfBouncedMessage = 0; ID = _ID; } @Override public void onActivityStart() { } @Override public void onActivityJoin() { if(ID == 0){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } JSONObject simMsg = new JSONObject(); try { simMsg.put("service","simulation"); simMsg.put("switchboard", "prpl.stanford.edu"); simMsg.put("session", this.getJunction().getSessionID()); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } this.getJunction().sendMessageToSession(simMsg); } } public void onMessageReceived(MessageHeader arg0, JSONObject arg1) { synchronized (TotalMessage){ NumOfBouncedMessage++; TotalMessage++; System.out.println("TotalMessage: " + TotalMessage); if((NumOfBouncedMessage-1) < NumOfMessage){ //System.out.print(ID + " received" + arg1+ " " + NumOfBouncedMessage + "\n"); //this.getJunction().sendMessageToSession(arg1); this.sendMessageToSession(arg1); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ //this.leave(); } } } }