29 static private string getType(MqSendE typ) {
31 case MqSendE.BOL:
return typeof(
bool).Name;
32 case MqSendE.I8:
return typeof(sbyte).Name;
33 case MqSendE.I16:
return typeof(
short).Name;
34 case MqSendE.I32:
return typeof(
int).Name;
35 case MqSendE.I64:
return typeof(
long).Name;
36 case MqSendE.FLT:
return typeof(
float).Name;
37 case MqSendE.DBL:
return typeof(
double).Name;
38 case MqSendE.BUF:
return typeof(
MkBufferC).Name;
40 case MqSendE.STR:
return typeof(
string).Name;
41 case MqSendE.BIN:
return typeof(
byte[]).Name;
42 case MqSendE.HDL:
return typeof(
int).Name;
43 default:
return "unknown";
143 static private MkErrorE atomSend(IntPtr
mkrt, IntPtr mqrt, IntPtr
hdl, IntPtr objvP, Int32 skip, MqSendE typ) {
144 var arg = ((
object[])GCHandle.FromIntPtr(objvP).Target)[skip];
148 if (arg is
string && typ < MqSendE.BUF) {
149 string str = (string)arg;
150 IntPtr cstr = Marshal.StringToHGlobalAnsi(str);
155 obj = outval == 1 ? true :
false;
201 Marshal.FreeHGlobal(cstr);
235 IntPtr cstr = Marshal.StringToHGlobalAnsi((
string)obj);
236 var ret = Mq.MqSendSTR (
mkrt,
hdl, cstr);
237 Marshal.FreeHGlobal(cstr);
241 byte[] val = (
byte[]) obj;
242 GCHandle pinnedArray = GCHandle.Alloc(val, GCHandleType.Pinned);
243 IntPtr val_ptr = pinnedArray.AddrOfPinnedObject();
250 IntPtr cstr2 = Marshal.StringToHGlobalAnsi(
"invalid MqSendE");
251 IntPtr cstr3 = Marshal.StringToHGlobalAnsi(
"InternalError");
253 Marshal.FreeHGlobal(cstr3);
254 Marshal.FreeHGlobal(cstr2);
257 }
catch (Exception ex) {
260 IntPtr cstr = Marshal.StringToHGlobalAnsi(
261 string.Format(
"expect '{0}' argument but got '{1}' of type '{2}' at position '{3}'",
262 getType(typ), obj, obj.GetType().Name, skip)
264 IntPtr cstr2 = Marshal.StringToHGlobalAnsi(
"ArgumentTypeError");
266 Marshal.FreeHGlobal(cstr2);
267 Marshal.FreeHGlobal(cstr);
269 IntPtr cstr3 = Marshal.StringToHGlobalAnsi(
" -> " + ex.ToString());
271 Marshal.FreeHGlobal(cstr3);
277 static private MkErrorE atomGet(IntPtr
mkrt, IntPtr mqrt, IntPtr
hdl, IntPtr objvP, Int32 skip, MqSendE typ,
278 IntPtr setP, Int32 size) {
282 var gch = GCHandle.FromIntPtr(objvP);
283 var objv = (
object[])gch.Target;
284 var obj = objv[skip];
288 case MqSendE.TRAN:
goto case MqSendE.TOKEN;
290 UTF8Encoding utf8 =
new UTF8Encoding();
291 var str = Convert.ToString(obj);
292 byte[] bytes = utf8.GetBytes(str +
"\0");
293 Marshal.Copy(bytes,0,setP,bytes.Length > size ? size : bytes.Length);
296 Marshal.WriteInt64(setP, Convert.ToInt64(obj));
304 IntPtr cstr = Marshal.StringToHGlobalAnsi(
"INTERNAL ERROR: invalid MqSendE");
305 IntPtr cstr2 = Marshal.StringToHGlobalAnsi(
"atomGet");
307 Marshal.FreeHGlobal(cstr2);
308 Marshal.FreeHGlobal(cstr);
311 }
catch (Exception ex) {
312 IntPtr cstr = Marshal.StringToHGlobalAnsi(ex.ToString());
313 IntPtr cstr2 = Marshal.StringToHGlobalAnsi(
"atomSend");
315 Marshal.FreeHGlobal(cstr2);
316 Marshal.FreeHGlobal(cstr);
325 static private MqAtomSendF ats =
new MqAtomSendF(atomSend);
326 static private MqAtomGetF atg =
new MqAtomGetF(atomGet);
329 private Object SendHigh(
string callSig, IntPtr fCall,
object[] objv,
int skipSHIFT) {
331 IntPtr bfl_out = IntPtr.Zero;
332 char highLastReturnListType;
333 var objvH = GCHandle.Alloc(objv);
334 IntPtr callSig_cstr = Marshal.StringToHGlobalAnsi(callSig);
335 IntPtr cstr = Marshal.StringToHGlobalAnsi(
"Send");
336 var errVal = Mq.MqCsSendHigh (
mkrt,
337 hdl, callSig_cstr, fCall, GCHandle.ToIntPtr(objvH), objv.Length,
338 skipSHIFT, out bfl_out, out highLastReturnListType, ats, atg,
339 ServiceCall, ServiceFree, cstr
341 Marshal.FreeHGlobal(cstr);
342 Marshal.FreeHGlobal(callSig_cstr);
344 if (bfl_out != IntPtr.Zero) {
349 if (ret ==
null || (ret.
Size() == 0 && highLastReturnListType !=
'*')) {
351 }
else if (ret.
Size() == 1 && highLastReturnListType !=
'*' ) {
352 if (highLastReturnListType ==
'U') {
354 }
else if (highLastReturnListType ==
'L') {
365 IntPtr data_ptr = (IntPtr)GCHandle.Alloc(
new MqCall(
mkrt,data));
366 return SendHigh(callSig, data_ptr, objv, 3);
370 IntPtr data_ptr = (IntPtr)GCHandle.Alloc(
new MqCall(
mkrt,data));
371 return SendHigh(callSig, data_ptr, objv, 3);
375 IntPtr data_ptr = (IntPtr)GCHandle.Alloc(
new MqCall(
mkrt,data));
376 return SendHigh(callSig, data_ptr, objv, 3);
379 public Object
Send(
string callSig, params
object[] objv) {
380 return SendHigh(callSig, IntPtr.Zero, objv, 2);
MqContextC - the class known as ctx or context is the application-handle of the application-server an...
Object Send(string callSig, params object[] objv)
delegate void MqServiceICB()
implements the csmqmsgque API object: public version from MqTokenF as method
Object Send(string callSig, MqServiceCCB data, params object[] objv)
Object Send(string callSig, MqServiceIF data, params object[] objv)
Object Send(string callSig, MqServiceICB data, params object[] objv)
delegate void MqServiceCCB(MqContextC ctx)
implements the csmqmsgque API object: public version from MqTokenF as static