1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using FObjBase;
using FObjSysTest.IService;
using FObjSysTest.OBJ_INTERFACE;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FObjSysTest.Server.OBJProxxy
{
public class ObjA_OBJProxy : FObj
{
#region 延时推送 MARKNO
const int MARKNO_PUSH_PARAMS = 1;
const int MARKNO_PUSH_STATUS = 2;
#endregion
IObjAService objAService;
public ObjA_OBJProxy(int objsys_idx, UInt32 objid, IObjAService objAService) : base(objsys_idx)
{
ID = objid;
this.objAService = objAService;
this.objAService.PropertyChanged += ObjAService_PropertyChanged;
}
private void ObjAService_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "Now")
{
FObjBase.PollModule.Current.Poll_JustOnce(
new PollModule.PollHandler(delegate ()
{
byte[] buf;
GetValue(null, 0, OBJA_OBJ_INTERFACE.GET_STATUS, out buf);
CurrObjSys.PushObjInfoEx(
this, OBJA_OBJ_INTERFACE.PUSH_STATUS,
buf);
}), this, MARKNO_PUSH_STATUS);
}
else if (e.PropertyName == "Numbers")
{
FObjBase.PollModule.Current.Poll_JustOnce(
new PollModule.PollHandler(delegate ()
{
byte[] buf;
GetValue(null, 0, OBJA_OBJ_INTERFACE.GET_PARAMS, out buf);
CurrObjSys.PushObjInfoEx(
this, OBJA_OBJ_INTERFACE.PUSH_PARAMS,
buf);
}), this, MARKNO_PUSH_PARAMS);
}
}
#region FObj
public override void ConnectNotify(IFConn from)
{
Console.WriteLine($"from.IsConnected={from.IsConnected}");
}
public override void GetValue(IFConn from, uint srcid, ushort memid, out byte[] infodata)
{
infodata = null;
switch (memid)
{
case OBJA_OBJ_INTERFACE.GET_STATUS:
{
var p = new OBJA_OBJ_INTERFACE.Pack_Status()
{
now = objAService.Now
};
string json = JsonConvert.SerializeObject(p);
infodata = Misc.Converter.StringToBytes(json);
}break;
case OBJA_OBJ_INTERFACE.GET_PARAMS:
{
var p = new OBJA_OBJ_INTERFACE.Pack_Params()
{
numbers = objAService.Numbers
};
string json = JsonConvert.SerializeObject(p);
infodata = Misc.Converter.StringToBytes(json);
}
break;
}
}
public override void SetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
{
switch (memid)
{
case OBJA_OBJ_INTERFACE.SET_PARAMS:
{
string json = Misc.Converter.BytesToString(infodata);
var p = JsonConvert.DeserializeObject<OBJA_OBJ_INTERFACE.Pack_Params>(json);
objAService.Numbers = p.numbers;
}
break;
}
}
public override void CallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] infodata)
{
switch (funcid)
{
case OBJA_OBJ_INTERFACE.CALL_GETNUMBERS:
{
string json = Misc.Converter.BytesToString(infodata);
var request = JsonConvert.DeserializeObject<Pack_CallGetNumbersRequest>(json);
objAService.GetNumbers(request.offset,
(asyncState, retdata) =>
{
var connContext = asyncState as ConnContext;
string json_reponse = JsonConvert.SerializeObject(retdata);
CurrObjSys.PushCallFunctionEx(
connContext.from,
connContext.srcid,
ID,
connContext.magic,
OBJA_OBJ_INTERFACE.CALL_GETNUMBERS,
Misc.Converter.StringToBytes(json_reponse));
}, new ConnContext(from, srcid, magic));
}
break;
}
}
#endregion
}
}