Thank you for response!
Here is almost full of my buddy persister implementation:
Code: Select all
public class BuddyListPersister extends AbstractBuddyPersister
{
private DbManager dbManager;
private ExtensionHelper helper;
@Override
public void init(Object param)
{
helper = ExtensionHelper.instance();
dbManager = SmartFoxServer.getInstance().getZone("testZone").dbManager;
}
@Override
public StorableBuddyList loadList(String userName)
{
StorableBuddyList buddyList = new StorableBuddyList();
String query = "select users.userid, users.nick from users, friends " +
"where users.userid = friends.friendid " +
"and friends.userid = (select userid from users where nick='" +
userName + "')";
ArrayList<DataRow> resultSet = dbManager.executeQuery(query);
for (int i = 0; i < resultSet.size(); i++)
{
DataRow row = resultSet.get(i);
StorableBuddyItem buddyItem = new StorableBuddyItem(row.getItem("nick"), false);
User user = this.getCurrentZone().getUserByName(buddyItem.name);
Map<String,String> vars = new HashMap<String,String>();
vars.put("dbid",row.getItem("friendid"));
helper.setBuddyVariables(user,vars);
buddyList.buddies.add(buddyItem);
}
return buddyList;
}
@Override
public boolean saveList(String userName, StorableBuddyList buddyList)
{
System.out.println("BuddyListPersister: saveList started...");
return true;
}
@Override
public Map getOfflineVariables(String userName)
{
Map<String, String> offlineVars = new HashMap<String, String>();
String query = "SELECT userid FROM users WHERE nick='" + userName + "'";
ArrayList<DataRow> resultSet = dbManager.executeQuery(query);
for (int i = 0; i < resultSet.size(); i++)
{
DataRow row = resultSet.get(i);
offlineVars.put("dbid", row.getItem("userid"));
}
return offlineVars;
}
@Override
public void destroy(Object param)
{
System.out.println("VD-MSG: BuddyListPersister: destroy started...");
}
}
I am sorry for not full information: Java-client works properly
Here is client code fragment:
Code: Select all
btnLoadBuddyList.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
sfs.loadBuddyList();
}
});
// ....
public void handleEvent(final SFSEvent event)
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
if(event.getName().equals(SFSEvent.onBuddyList))
{
int size = ((List<Buddy>)event.getParams().get("list")).size();
System.out.println("Buddy list size = " + size);
}
}
}
}
But .NET-client don't works.
Code: Select all
private void Form1_Load(object sender, EventArgs e)
{
SFSEvent.onBuddyList += OnBuddyList;
}
// ...
public void OnBuddyList(ArrayList buddyList)
{
if (chbShowEventsEntrance.Checked)
lock (this) { txtLog.Text = txtLog.Text + "On_Buddy_List\r\n"; }
foreach (Buddy buddy in buddyList)
{
lock (this)
{
txtLog.Text = txtLog.Text + "Buddy name: " + buddy.GetName() + "\r\n";
}
}
}
Thank you for help!