Hey,
Your code is totally correct. But it also suffers from the same Mono bug if you try to run that in the API. At least it throws the exact same error here when I paste that in after closing tab and trying to connect again.
(Also beware that it might look as if it all works if you run bluebox - the bluebox lookup seems to work correctly with hostname lookup)
Thread about the bug from the Unity forums:
http://forum.unity3d.com/viewtopic.php?t=13483
As you can see I was fooled by some small tests I made into thinking it was fixed - and thus put it into the API 1.2.4
/Thomas
Problem with 1.2.4
-
- Posts: 1297
- Joined: 14 Mar 2008, 07:52
- Location: Sweden
I have the same problem, and applying the fix from the code snippet to force SFS to NOT use DNS resolution works... kind of. But a different error right afterwards still prevents Mac Firefox from connecting properly.
I added a few debug logs to the SFS CSharp API to see what was going on, but I'm still puzzled - it seems to be another problem specific to Mac Mono. Basically, it looks like the function GetString(XmlNode, string) from XmlUtil.cs, when called from XmlReceived (SmartFoxClient.cs), throws an exception it's not supposed to throw. I added a "catch (Exception e)" in XmlReceived to see what was going on. Here's what I get from DebugMessage on the Mac Firefox webplayer, with lines starting with "###" being log additions of my own:
Any idea on how to prevent this?
I added a few debug logs to the SFS CSharp API to see what was going on, but I'm still puzzled - it seems to be another problem specific to Mac Mono. Basically, it looks like the function GetString(XmlNode, string) from XmlUtil.cs, when called from XmlReceived (SmartFoxClient.cs), throws an exception it's not supposed to throw. I added a "catch (Exception e)" in XmlReceived to see what was going on. Here's what I get from DebugMessage on the Mac Firefox webplayer, with lines starting with "###" being log additions of my own:
Any idea on how to prevent this?
Code: Select all
> Trying to connect
> [Sending]: <msg t='sys'><body action='verChk' r='0'><ver v='154' /></body></msg>
> ### Read 92 bytes
> ### messages.Count is 2
> [ RECEIVED ]: <cross-domain-policy><allow-access-from domain='*' to-ports='9339' /></cross-domain-policy>, (len: 91)
> XmlReceived: <cross-domain-policy><allow-access-from domain='*' to-ports='9339' /></cross-domain-policy>
> ### XML Handler exception System.TypeInitializationException: An exception was thrown by the type initializer for System.Console ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.ConsoleDriver ---> System.IO.IOException: Win32 IO returned 50. Path: /etc/terminfo
at System.IO.Directory.Exists (System.String path) [0x00000]
at System.TermInfoDriver.SearchTerminfo (System.String term) [0x00000]
at System.TermInfoDriver..ctor (System.String term) [0x00000]
at System.ConsoleDriver..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at System.Console..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at Mono.Xml.XPath.XPathParser..ctor (IStaticXsltContext context) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath, IXmlNamespaceResolver nsmgr, IStaticXsltContext ctx) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath) [0x00000]
at System.Xml.XPath.XPathNavigator.Compile (System.String xpath) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath, System.Xml.XmlNamespaceManager nsmgr) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath) [0x00000]
at SmartFoxClientAPI.Util.XmlUtil.GetString (System.Xml.XmlNode node, System.String path) [0x00000]
at SmartFoxClientAPI.SmartFoxClient.XmlReceived (System.String msg) [0x00000]
> ### Read 54 bytes
> ### messages.Count is 2
> [ RECEIVED ]: <msg t='sys'><body action='apiOK' r='0'></body></msg>, (len: 53)
> XmlReceived: <msg t='sys'><body action='apiOK' r='0'></body></msg>
> ### XML Handler exception System.TypeInitializationException: An exception was thrown by the type initializer for System.Console ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.ConsoleDriver ---> System.IO.IOException: Win32 IO returned 50. Path: /etc/terminfo
at System.IO.Directory.Exists (System.String path) [0x00000]
at System.TermInfoDriver.SearchTerminfo (System.String term) [0x00000]
at System.TermInfoDriver..ctor (System.String term) [0x00000]
at System.ConsoleDriver..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at System.Console..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at Mono.Xml.XPath.XPathParser..ctor (IStaticXsltContext context) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath, IXmlNamespaceResolver nsmgr, IStaticXsltContext ctx) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath) [0x00000]
at System.Xml.XPath.XPathNavigator.Compile (System.String xpath) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath, System.Xml.XmlNamespaceManager nsmgr) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath) [0x00000]
at SmartFoxClientAPI.Util.XmlUtil.GetString (System.Xml.XmlNode node, System.String path) [0x00000]
at SmartFoxClientAPI.SmartFoxClient.XmlReceived (System.String msg) [0x00000]
-
- Posts: 1297
- Joined: 14 Mar 2008, 07:52
- Location: Sweden
PM sent.
***
Edit: Actually, here's a way simpler test case I just found to replicate that problem. Tag this in SmartFoxClient.cs:
Then call it somewhere like this in Unity:
In most cases, when you click DEBUGTEST it'll just print out "sys", which is correct. But in Mac Firefox webplayer it'll print out this:
***
Edit: Actually, here's a way simpler test case I just found to replicate that problem. Tag this in SmartFoxClient.cs:
Code: Select all
public static string DEBUGTEST(string msg)
{
string handlerId;
try
{
XmlDocument xmlData = new XmlDocument();
xmlData.LoadXml(msg);
handlerId = XmlUtil.GetString(xmlData, "/msg/@t");
}
catch (Exception e)
{
return e.ToString();
}
return handlerId;
}
Then call it somewhere like this in Unity:
Code: Select all
private string debugLog = "";
void OnGUI()
{
if (GUI.Button(new Rect(120, 230, 100, 25), "DEBUGTEST"))
{
string s = SmartFoxClient.DEBUGTEST("<msg t='sys'><body action='apiOK' r='0'></body></msg>");
debugLog += "\n>> " + s;
}
GUI.TextArea(new Rect(10, 260, Screen.width - 20, Screen.height - 280), debugLog);
}
In most cases, when you click DEBUGTEST it'll just print out "sys", which is correct. But in Mac Firefox webplayer it'll print out this:
Code: Select all
>> System.TypeInitializationException: An exception was thrown by the type initializer for System.Console ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.ConsoleDriver ---> System.IO.IOException: Win32 IO returned 50. Path: /etc/terminfo
at System.IO.Directory.Exists (System.String path) [0x00000]
at System.TermInfoDriver.SearchTerminfo (System.String term) [0x00000]
at System.TermInfoDriver..ctor (System.String term) [0x00000]
at System.ConsoleDriver..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at System.Console..cctor () [0x00000] --- End of inner exception stack trace ---
at <0x00000> <unknown method>
at Mono.Xml.XPath.XPathParser..ctor (IStaticXsltContext context) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath, IXmlNamespaceResolver nsmgr, IStaticXsltContext ctx) [0x00000]
at System.Xml.XPath.XPathExpression.Compile (System.String xpath) [0x00000]
at System.Xml.XPath.XPathNavigator.Compile (System.String xpath) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath, System.Xml.XmlNamespaceManager nsmgr) [0x00000]
at System.Xml.XmlNode.SelectSingleNode (System.String xpath) [0x00000]
at SmartFoxClientAPI.Util.XmlUtil.GetString (System.Xml.XmlNode node, System.String path) [0x00000]
at SmartFoxClientAPI.SmartFoxClient.DEBUGTEST (System.String msg) [0x00000]
Return to “.Net / Unity3D API”
Who is online
Users browsing this forum: No registered users and 29 guests