summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfcolin2007-02-01 10:01:46 +0000
committerfcolin2007-02-01 10:01:46 +0000
commit2a5836fa451fae32822820375ca483ea88e4a54b (patch)
treebff37f13fc9eb3afaafb21b98b9c38835155948a
parente2c951a22e785e64283e7192a92f052451c15cdb (diff)
downloadivy-csharp-2a5836fa451fae32822820375ca483ea88e4a54b.zip
ivy-csharp-2a5836fa451fae32822820375ca483ea88e4a54b.tar.gz
ivy-csharp-2a5836fa451fae32822820375ca483ea88e4a54b.tar.bz2
ivy-csharp-2a5836fa451fae32822820375ca483ea88e4a54b.tar.xz
Utilisateur : Fcolin Date : 22/12/05 Heure : 17:48 Archivé dans $/CSharp/Ivy Commentaire: bug dans l'implementation du protocol (vss 3)
-rw-r--r--CSharp/Ivy/IvyPPC/IvyTCPStreamV3.cs80
1 files changed, 27 insertions, 53 deletions
diff --git a/CSharp/Ivy/IvyPPC/IvyTCPStreamV3.cs b/CSharp/Ivy/IvyPPC/IvyTCPStreamV3.cs
index 88e7041..43d0d54 100644
--- a/CSharp/Ivy/IvyPPC/IvyTCPStreamV3.cs
+++ b/CSharp/Ivy/IvyPPC/IvyTCPStreamV3.cs
@@ -52,28 +52,19 @@ namespace IvyBus
* message Format:
MessageType, id , length, string
*/
- private void Serialize(ushort arg, char sep)
- {
- output.Write(arg);
- output.Write(sep);
- }
- private void Serialize(string[] arg, char sep)
- {
- for (int i = 0; i < arg.Length; i++)
- {
- output.Write(arg[i]);
- if ( i != (arg.Length-1) ) output.Write(sep);
- }
- }
- private void sendMsg(MessageType msgType, ushort msgId,params string[] msgData)
+
+ private void sendMsg(MessageType msgType, ushort msgId, string msgData)
{
#if DEBUG
Console.WriteLine(" sendMsg {0} id={1} data={2}", msgType, msgId, msgData);
#endif
- Serialize((ushort)msgType, ' ');
- Serialize(msgId, ARG_START);
- Serialize(msgData, ARG_END);
- output.Write(MSG_END);
+
+ output.Write((ushort)msgType);
+ output.Write( ' ' );
+ output.Write( msgId );
+ output.Write( ARG_START );
+ output.Write( msgData );
+ output.Write( MSG_END);
output.Flush();
}
public override void TokenStartRegexp(ushort port, string appName)
@@ -128,7 +119,9 @@ namespace IvyBus
public override void TokenMsg(ushort key, string[] args)
{
- sendMsg(MessageType.Msg, key, args);
+ string delimiter = "" + ARG_END;
+ string data = string.Join(delimiter, args);
+ sendMsg(MessageType.Msg, key, data);
}
public override void TokenError(ushort key, string arg)
@@ -152,10 +145,10 @@ namespace IvyBus
} while (Char.IsDigit(digit));
return ret;
}
- private string DeserializeString(char sep,char eol_sep, out bool eol)
+ private string DeserializeString(char sep)
{
int read;
- char car = eol_sep;
+ char car;
StringBuilder str = new StringBuilder();
// this will eat next non separator char
do
@@ -163,56 +156,37 @@ namespace IvyBus
read = input.Read();
if (read < 0) break;
car = (char)read;
- if (car != sep && car != eol_sep) str.Append(car);
- } while (car != sep && car != eol_sep);
- eol = car == eol_sep || (read < 0 );
+ if (car != sep ) str.Append(car);
+ } while (car != sep);
return str.ToString();
}
-
- private string[] DeserializeArgument()
- {
- StringCollection coll;
- string[] args;
- string str;
- bool eol;
-
- coll = new StringCollection();
- do
- {
- str = DeserializeString(ARG_END, MSG_END, out eol);
- coll.Add(str);
- } while (!eol);
- args = new string[coll.Count];
- coll.CopyTo(args, 0);
- return args;
- }
internal override bool receiveMsg()
{
MessageType msgType = MessageType.Die;
ushort msgId = 0;
- string[] msgData = null;
+ string msgData = null;
try
{
msgType = (MessageType)DeserializeShort();
msgId = DeserializeShort();
- msgData = DeserializeArgument();
+ msgData = DeserializeString(MSG_END);
#if DEBUG
Console.WriteLine(" receiveMsg {0} id={1} data={2}", msgType, msgId, msgData);
#endif
switch (msgType)
{
case MessageType.Die:
- receiver.TokenDie(msgId, msgData[0]);
+ receiver.TokenDie(msgId, msgData);
break;
case MessageType.Bye:
- receiver.TokenBye(msgId, msgData[0]);
+ receiver.TokenBye(msgId, msgData);
break;
case MessageType.AddRegexp:
- receiver.TokenAddRegexp(msgId, msgData[0]);
+ receiver.TokenAddRegexp(msgId, msgData);
break;
case MessageType.DelBinding:
@@ -224,27 +198,27 @@ namespace IvyBus
break;
case MessageType.Msg:
- receiver.TokenMsg(msgId, msgData);
+ receiver.TokenMsg(msgId, msgData.Split( ARG_END ));
break;
case MessageType.Pong:
- receiver.TokenPong(msgData[0]);
+ receiver.TokenPong(msgData);
break;
case MessageType.Ping:
- receiver.TokenPing(msgData[0]);
+ receiver.TokenPing(msgData);
break;
case MessageType.Error:
- receiver.TokenError(msgId, msgData[0]);
+ receiver.TokenError(msgId, msgData);
break;
case MessageType.StartRegexp:
- receiver.TokenStartRegexp(msgId, msgData[0]);
+ receiver.TokenStartRegexp(msgId, msgData);
break;
case MessageType.DirectMsg:
- receiver.TokenDirectMsg(msgId, msgData[0]);
+ receiver.TokenDirectMsg(msgId, msgData);
break;
default:
throw new IvyException("protocol error, unknown message type " + msgType);