internal Object[] WriteArray(String uri, String methodName, String typeName, Type[] instArgs, Object[] args, Object methodSignature, Object callContext, Object[] properties)
{
this.uri = uri;
this.methodName = methodName;
this.typeName = typeName;
this.instArgs = instArgs;
this.args = args;
this.methodSignature = methodSignature;
this.callContext = callContext;
this.properties = properties;
int arraySize = 0;
if (args == null || args.Length == 0)
messageEnum = MessageEnum.NoArgs;
else
{
argTypes = new Type[args.Length];
// Check if args are all string or primitives
bArgsPrimitive = true;
for (int i =0; i<args.Length; i++)
{
if (args[i] != null)
{
argTypes[i] = args[i].GetType();
if (!(argTypes[i].IsPrimitive || argTypes[i] == Converter.typeofString) || args[i] is ISerializable)
{
bArgsPrimitive = false;
break;
}
}
}
if (bArgsPrimitive)
messageEnum = MessageEnum.ArgsInline;
else
{
arraySize++;
messageEnum = MessageEnum.ArgsInArray;
}
}
if (instArgs != null)
{
arraySize++;
messageEnum |= MessageEnum.GenericMethod;
}
if (methodSignature != null)
{
arraySize++;
messageEnum |= MessageEnum.MethodSignatureInArray;
}
if (callContext == null)
messageEnum |= MessageEnum.NoContext;
else if (callContext is String)
messageEnum |= MessageEnum.ContextInline;
else
{
arraySize++;
messageEnum |= MessageEnum.ContextInArray;
}
if (properties != null)
{
arraySize++;
messageEnum |= MessageEnum.PropertyInArray;
}
if (IOUtil.FlagTest(messageEnum, MessageEnum.ArgsInArray) && arraySize == 1)
{
messageEnum ^= MessageEnum.ArgsInArray;
messageEnum |= MessageEnum.ArgsIsArray;
return args;
}
if (arraySize > 0)
{
int arrayPosition = 0;
callA = new Object[arraySize];
if (IOUtil.FlagTest(messageEnum, MessageEnum.ArgsInArray))
callA[arrayPosition++] = args;
if (IOUtil.FlagTest(messageEnum, MessageEnum.GenericMethod))
callA[arrayPosition++] = instArgs;
if (IOUtil.FlagTest(messageEnum, MessageEnum.MethodSignatureInArray))
callA[arrayPosition++] = methodSignature;
if (IOUtil.FlagTest(messageEnum, MessageEnum.ContextInArray))
callA[arrayPosition++] = callContext;
if (IOUtil.FlagTest(messageEnum, MessageEnum.PropertyInArray))
callA[arrayPosition] = properties;
return callA;
}
else
return null;
}