/*
* LoadRunner Java script. (Build: 15)
* Script Description:
*
* 作者:谷博涛
* 制作时间:2012-1-18
* E-mail:captain_gbt@foxmail.com
* Loadrunner:11.00
*
* 内容概要:
* 模拟基于Socket协议的即时消息系统中的客户端行为LR脚本,
* 为模拟真实IM客户端,接收消息和发送消息分两个线程工作。
*
*/
import lrapi.lr;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
public class Actions
{
// 客户端
private Socket client;
// 房间号
private String roomId;
// 用户ID
private String id;
// 输出流
private OutputStream out;
// 输入流
private InputStream in;
// 连接标志
//private boolean connFlag = false;
private AtomicBoolean connFlag =new AtomicBoolean(false);
// 客户端是否结束标志
//private boolean endFlag = true;
private AtomicBoolean endFlag =new AtomicBoolean(true);
public int init() throws Throwable {
connect();
//lr.think_time(10);
return 0;
}//end of init
public int action() throws Throwable {
sendAction();
return 0;
}//end of action
public int end() throws Throwable {
sendEnd();
return 0;
}//end of end
//====主题代码==================//
//连接服务器
private void connect() {
try {
client = new Socket("127.0.0.1", 5222);
System.out.println("connect success!!!");
out = client.getOutputStream();
in = client.getInputStream();
receiveAction();
login();
} catch (UnknownHostException e) {
System.out.println("UnknownHostException=" + e);
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException=" + e);
e.printStackTrace();
}
}
//登录服务器
private void login() {
String loginMsg = "";
sendMsg(loginMsg);
}
//启动接收线程
private void receiveAction() {
new ReceiveThread().start();
}
//得到房间号码和用户ID
private void getEleVal(String msg) {
int index =0;
index = msg.indexOf("to");
msg = msg.substring(index + 4, msg.length());
index = msg.indexOf("'");
id = msg.substring(0, index);
System.out.println(roomId);
index = msg.indexOf("roomId");
msg = msg.substring(index + 8, msg.length());
index = msg.indexOf("'");
roomId = msg.substring(0, index);
System.out.println(id);
connFlag.set(true);
}
//发送消息
private void sendAction() {
if(connFlag.get()){
System.out.println("发送消息----->");
String msg = "
+ "\" to=\"" + roomId + "\">
test";sendMsg(msg);
}
}
//调用写入流方法
private void sendMsg(String msg) {
//new SendThread(msg).start();
writeMsg(msg);
}
//将消息写入流
private void writeMsg(String msg) {
try {
if (out != null) {
out.write(msg.getBytes("UTF-8"));
out.flush();
}
} catch (Exception e) {
System.out.println("Exception=" + e);
}
}
//关闭客户端
private void sendEnd() {
endFlag.set(false);
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 接收消息线程类
*
* @author Administrator
*
*/
private class ReceiveThread extends Thread {
@Override
public void run() {
while (endFlag.get()) {// 循环接收消息
try {
int len = in.available();
if(len>0){
System.out.println(len);
byte[] bytes = new byte[len];
in.read(bytes);
String result = new String(bytes);
System.out.println("接收到的消息:" + result);
if(result != null && !"".equals(result)&& result.contains("res_bind")){
getEleVal(result);
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
//======发送消息线程类(本代码未用到)=========
private class SendThread extends Thread {
private String msg;
public SendThread(String msg) {
this.msg = msg;
}
@Override
public void run() {
if (connFlag.get()) {
writeMsg(msg);
}
}
}
}//end for class Actions
谷博涛
二零一二年 农历腊月廿五 下午