Page 1 of 1

Java Extension Not Receiving String Packets

Posted: 29 Nov 2014, 17:15
by devlpr
This is my first time creating an extension, I tried looking at the docs and everything. I created a simple extension and made it log all requests received. For some reason, it's not receiving the "str" packets. Here's the extension:

Code: Select all

package <redacted>;

import java.nio.channels.SocketChannel;
import java.util.*;

import it.gotoandplay.smartfoxserver.db.*;
import it.gotoandplay.smartfoxserver.data.*;
import it.gotoandplay.smartfoxserver.exceptions.*;
import it.gotoandplay.smartfoxserver.extensions.*;
import it.gotoandplay.smartfoxserver.lib.ActionscriptObject;
import it.gotoandplay.smartfoxserver.events.InternalEventObject;

import org.json.JSONObject; 

public class Game extends AbstractExtension
{

	public void init()
	{
		System.out.println("init!");
		trace("Extension initialized");	
	}
	
	@Override
	public void handleRequest(String cmd, String[] data, User u, int fromRoom)
	{
	   String[] params = new String[] {
			   "testcommand",
			   "yes"
	    };
	         
	   LinkedList recipients = new LinkedList();
	   recipients.add(u);
	   trace ("received str!");
	   sendResponse(params, -1, null, recipients);
	}
	 
	@Override
	public void handleRequest(String cmd, JSONObject jso, User u, int fromRoom)
	{
		System.out.println("got handlrequest");
		trace ("received a command : " + cmd);
	}
	
	public void handleRequest(String cmd, ActionscriptObject ao, User u, int fromRoom)
	{
		// nothing yet
	}

	@Override
	public void handleInternalEvent(InternalEventObject ieo)
	{
		String event = ieo.getEventName();
		trace ("int event: " + event);
	}
}
Here's the code I'm using to send the XT packet in Flash:

Code: Select all

function sendLogin()
{
	if (!_global.isBusy)
		smartfox.login(zone, login_txt.text, null)
	smartfox.sendXtMessage("test", "loginTest", login_txt.text);
}
I know it's sending because I see the output trace say "[Sending]: %xt%test.."

Re: Java Extension Not Receiving String Packets

Posted: 05 Dec 2014, 10:23
by Lapo
You need to specify the protocol in the sendXtMessage call

Example:

Code: Select all

smartfox.sendXtMessage("test", "loginTest", login_txt.text, "str");
the 4th parameter indicates the protocol. If omitted it will default to XML.

Re: Java Extension Not Receiving String Packets

Posted: 06 Dec 2014, 03:24
by devlpr
Lapo wrote:You need to specify the protocol in the sendXtMessage call

Example:

Code: Select all

smartfox.sendXtMessage("test", "loginTest", login_txt.text, "str");
the 4th parameter indicates the protocol. If omitted it will default to XML.
I must've forgotten that in my original post. But the code I was using before had the proper arguments, so I know it's sending the packet correctly:

Code: Select all

[Sending]: %xt%test%loginTest%-1%undefined%
I know the undefined is an issue but I'm currently just testing XT packets, not really worried about proper data being sent with them. All I receive on the server's side is that it received a login request. No XT packets. Could this be a config issue? This is my current config:

Code: Select all

<SmartFoxConfig>
	
	<ServerSetup>
		<!-- 
			Specify an ip address or use an asterisk(*) to bind all available IPs
		-->
		<ServerIP>*</ServerIP>
		<ServerPort>9339</ServerPort>
		
		<PolicyAllowedDomains>
			<AllowedDomain>*.mydomain.tld</AllowedDomain>
		</PolicyAllowedDomains>
		
		<AutoSendPolicyFile>true</AutoSendPolicyFile>
		<MaxUserIdleTime>3600</MaxUserIdleTime>
		
		<!-- Server Variables limits (-1 = unlimited) -->
		<MaxRoomVars>-1</MaxRoomVars>
		<MaxUserVars>-1</MaxUserVars>
		
		<!-- New since 1.6.3, optimizes user variables size -->
		<UserVarsOptimization>true</UserVarsOptimization>
		
		<AntiFlood active="false">
			<MinMsgTime tolerance="5">1000</MinMsgTime>
			<MaxRepeatedMessages>3</MaxRepeatedMessages>
			<WarningsBeforeKick>2</WarningsBeforeKick>
			<WarningMessage><![CDATA[No flooding allowed!)]]></WarningMessage>
			<KickMessage><![CDATA[You've been warned! No flooding! Now you're kicked]]></KickMessage>
			<BanMessage><![CDATA[Stop Flooding!! You're being banned]]></BanMessage>			
			<BanAfter timeSpan="1">3</BanAfter>
		</AntiFlood>
		
		<BadWordsFilter active="false">
			<FilterMode>filter</FilterMode> <!-- REMOVE or FILTER -->
			<StripCharacters><![CDATA[,.;:_!$%&/#*-+]]></StripCharacters>
			<Warnings>true</Warnings>
			<FilterRoomNames>true</FilterRoomNames>
			<FilterUserNames>true</FilterUserNames>
			<WarningsBeforeKick>3</WarningsBeforeKick>
			<WarningMessage><![CDATA[No swearing!)]]></WarningMessage>
			<KickMessage><![CDATA[You've been warned! No Swearing! Now you're kicked]]></KickMessage>
			<BanMessage><![CDATA[Stop Swearing! You're being banned!]]></BanMessage>	
			<BanAfter timeSpan="1">3</BanAfter>
			
			<BadWordsList>				
				<badWord>dickhead</badWord>
				<badWord>asshole</badWord>
				<badWord>shithead</badWord>
				<badWord>shit</badWord>
				<badWord>fucking</badWord>
				<badWord>fuck</badWord>
				<badWord>dickhead</badWord>
				<badWord>bastard</badWord>
				<badWord>nigger</badWord>
				<badWord>idiot</badWord>
				<badWord>bitch</badWord>
			</BadWordsList>
		</BadWordsFilter>
		
		<BanCleaning>auto</BanCleaning>
		<BanDuration>1800</BanDuration> <!-- 30 min -->
		<BannedLoginMessage>You have been banned!</BannedLoginMessage>
		
		<OutQueueThreads>2</OutQueueThreads>
		<ExtHandlerThreads>1</ExtHandlerThreads>
		<MaxWriterQueue>50</MaxWriterQueue>

		<ClientMessagQueue>
			<QueueSize>100</QueueSize>
			<MaxAllowedDroppedPackets>10</MaxAllowedDroppedPackets>
		</ClientMessagQueue>
		
		<MaxIncomingQueue>5000</MaxIncomingQueue>
		<DeadChannelsPolicy>strict</DeadChannelsPolicy>
		<MaxMsgLen>4096</MaxMsgLen>
		
		<LogMaxSize>5000000</LogMaxSize>
		<LogMaxFiles>5</LogMaxFiles>
		
		<FileLoggingLevel>INFO</FileLoggingLevel>
		<ConsoleLoggingLevel>INFO</ConsoleLoggingLevel>	
		
		<!-- Adminisitrator login -->
		<AdminLogin>sfs_admin</AdminLogin>
		<AdminPassword>sfs_pass</AdminPassword>
		
		<!-- Allowed administrator IP addresses -->
		<AdminAllowedAddresses>
			<AllowedAddress>*.*.*.*</AllowedAddress>
		</AdminAllowedAddresses>
		
		<!-- Allow remote debugging of extensions -->
		<ExtensionRemoteDebug>true</ExtensionRemoteDebug>
		
		<!-- 
			Allow global autoreload of extensions upon file save 
			You should specify in each Zone if the autoreload is enabled.
		-->
		<AutoReloadExtensions>false</AutoReloadExtensions>
		
		<IpFilter>0</IpFilter>
		
		<Mailer>
			<MailHost>test.mail.com</MailHost>
			<MailUser>foo</MailUser>
			<MailPass>bar</MailPass>
			<SmtpPort>25</SmtpPort>
			<WorkerThreads>1</WorkerThreads>
		</Mailer>
		
		<!-- Enable / Disable remote zone info -->
		<EnableZoneInfo>false</EnableZoneInfo>
		
		<!-- Enable / Disable embedded webserver -->
		<WebServer active="false">
			<CfgFile>webserver/cfg/jetty.xml</CfgFile>
		</WebServer>
		
		<!--  raw custom protocol separator --> 
		<RawProtocolSeparator><![CDATA[%]]></RawProtocolSeparator>
		
		<EnableNPC>false</EnableNPC>
		
		<!-- Use concurrent map for properties objects -->
		<DynamicPropertiesClass>java.util.concurrent.ConcurrentHashMap</DynamicPropertiesClass>
		
		<!-- Send a message to client, on wrong Zone. DISABLE THIS ONE IN PRODUCTION
		<WarnOnWrongZoneRequest><![CDATA[Invalid zone: %s]]></WarnOnWrongZoneRequest>
		-->
	</ServerSetup>
	
	
	
	<!--
		Zones Configuration.
	-->
	<Zones>	
	
		<Zone name="cGame" uCountUpdate="false" buddyList="false" maxUsers="1000" customLogin="true">
			<Rooms>
				<Room name="Lobby" maxUsers="1000" isPrivate="false" isTemp="false" uCountUpdate="false" />
			</Rooms>
			
			<Extensions>
				<extension name="test" className="package.location.Class (redacted original)" type="java" />
			</Extensions>
			
			<Moderators status="off">
				<Mod name="Moderator" pwd="moderator" />
			</Moderators>
			
		</Zone>
	
	</Zones>
	
	
</SmartFoxConfig>

Re: Java Extension Not Receiving String Packets

Posted: 11 Dec 2014, 12:14
by Lapo
Are you sure you don't have any exceptions on the server side, after sending the request?
Also, are you sure the Extension is actually running?
Adding a trace statement in the init() method will help you make sure your code is working correctly.

cheers

Re: Java Extension Not Receiving String Packets

Posted: 12 Dec 2014, 22:12
by devlpr
Lapo wrote:Are you sure you don't have any exceptions on the server side, after sending the request?
Also, are you sure the Extension is actually running?
Adding a trace statement in the init() method will help you make sure your code is working correctly.

cheers

In my first post the init had a trace, so yeah.

There are no exceptions, as far as I know. The handleRequest function just simply traces out a message and sends a packet to the client.