protected GroupDevice CoAsynGetGroup(string detail) { GroupDevice newUncompletGroup = new GroupDevice(this); _asynGetGroupRunner.EnqueueMessage(new KeyValuePair <string, GroupDevice>(detail, newUncompletGroup)); return(newUncompletGroup); }
public GroupDetailViewModel(INavigation nav, GroupDevice item = null) { m_navigation = nav; Title = BuildBreadCrumb(nav, item.Owner); Item = item; Items = new ObservableRangeCollection <Model.Device>(item.Devices.OrderByDescending(x => x.TotalUsage).Select(x => x).ToList()); GoToDetailsCommand = new Command <string>(ExecuteGoToDetailsCommand); }
public RadioPackage(GroupDevice targetGroup, string radioName, Dictionary <string, byte[]> _attrDefaultValues) : base("RadioPackage", _attrDefaultValues) { _targetGroup = targetGroup; _radioName = radioName; }
internal GroupDevice GetGroup(string detail) { //配置请求包 ServerRequestPackage reqtPkg = new ServerRequestPackage(true); IOnlineGroupListRequest reqtInterface = reqtPkg.Active_OnlineGroupListRequest(); reqtInterface.OnlineGroupRequest(); BinTransferLayer binprocessor = _mclLayerProcessor.BinTransferProcessor; ServerReplyPackage replyPkg = null; try { replyPkg = binprocessor.SynSendMessage(reqtPkg, 100000); } catch (Exception ex) { throw new GetOnlineGroupExcetion(ex.ToString()); } IOnlineGroupReply replyInterface = replyPkg.Active_OnlineGroupReply(); bool ret; string errorDetail; List <CSCommunicateClass.GroupInfo> onlineGroupInfo; replyInterface.OnlineGroupRet(out ret, out errorDetail, out onlineGroupInfo); if (true == ret) { foreach (CSCommunicateClass.GroupInfo item in onlineGroupInfo) { if (item.Detail.Equals(detail)) { GroupDevice gropInst = new GroupDevice(_mclLayerProcessor); GroupDevice.Parse(item, gropInst); try { //check join statucs List <CSCommunicateClass.ClientInfo> clients = null; GetGroupMembers(gropInst, out clients); if ((null != clients) && (0 < clients.Count)) { gropInst.Joined = true; } } catch (System.Exception ex) { //nothing to do } return(gropInst); } } throw new GetOnlineGroupExcetion("不存在指定名称的群组"); } else { throw new GetOnlineGroupExcetion(errorDetail); } }
protected GroupDevice CoAsynCreateGroup(string detail) { GroupDevice asynWaitGoup = new GroupDevice(this as MiddlewareCorelogicLayer); asynWaitGoup.Detail = detail; asynWaitGoup.Token = null; asynWaitGoup.Ready = false; _asynCreategroupRunner.EnqueueMessage(new KeyValuePair <string, GroupDevice>(detail, asynWaitGoup)); return(asynWaitGoup); }
public void ParseSerializeData(CCCommunicateClass.Seria_RadioPackage obj) { base.ParseSerializeData(obj as CCCommunicateClass.Seria_ParamPackage); this.RadioName = obj.RadioName; GroupDevice tmpGroupDevice = new GroupDevice(); tmpGroupDevice.ParseSerializeData(obj.GroupInfo); this.Group = tmpGroupDevice; }
protected void CoSynJoinGroup(GroupDevice group, GroupMemberRole role) { try { group.Join(role); } catch (System.Exception ex) { throw ex; } }
protected void CoSynExitGroup(GroupDevice group) { try { group.Exit(); } catch (System.Exception ex) { throw ex; } }
private void __CoAsynExitGroupRunning(GroupDevice group) { try { group.Exit(); } catch (System.Exception ex) { group.excetion = ex as ExitGroupExcetion; } }
protected GroupComunicatePackage CoCreateGroupCommunicatePackage(string radioName, ParamPackage radioParamPkg, GroupDevice targetGroup) { GroupComunicatePackage gropCommunicatPkg = new GroupComunicatePackage(); gropCommunicatPkg.CommunicationName = radioName; gropCommunicatPkg.ParamPackage = radioParamPkg; gropCommunicatPkg.TargetDevice = targetGroup; gropCommunicatPkg.WaitResponse = false; return(gropCommunicatPkg); }
internal void JoinGroup(GroupDevice group, GroupMemberRole role) { //配置请求包 ServerRequestPackage reqtPkg = new ServerRequestPackage(true); IJoinGroupRequest reqtInterface = reqtPkg.Active_JoinGroupRequest(); if (group.Ready && !string.IsNullOrEmpty(group.Token)) { reqtInterface.JoinGroup(group.Token, role); } else { throw new ArgumentNullException("Group token is null"); } BinTransferLayer binprocessor = _mclLayerProcessor.BinTransferProcessor; ServerReplyPackage replyPkg = null; try { replyPkg = binprocessor.SynSendMessage(reqtPkg, 100000); } catch (System.Exception ex) { throw new JoinGroupExcetion(ex.ToString()); } IJoinGroupReply replyInterface = replyPkg.Active_JoinGroupReply(); bool ret; string detail; replyInterface.JoinGroupRet(out ret, out detail); if (true == ret) { //该部分逻辑内聚到Group内部 ////加入成功 //group.Joined = true; //try //{ // //从接口的使用习惯上考虑,立即返回成员列表 // group.Referesh(); //} //catch (RefereshGroupInfo ex) //{ // //虽然刷新讯息抛出错误,但仍可以判定客户端已加入 // throw ex; //} } else { throw new JoinGroupExcetion(detail); } }
protected GroupDevice CoSynGetGroup(string detail) { try { GroupDevice gropDevice = _groupCommunicateProcessor.GetGroup(detail); _localGroupDeviceBuffer.Add(gropDevice); return(gropDevice); } catch (System.Exception ex) { throw ex; } }
private void UpdateObject(GroupDevice _newGroupDevice, ref GroupDevice _oldGroupDevice) { try { foreach (PropertyInfo GroupDevicePropInfo in _newGroupDevice.GetType().GetProperties().ToList()) { _oldGroupDevice.GetType().GetProperty(GroupDevicePropInfo.Name).SetValue(_oldGroupDevice, _newGroupDevice.GetType().GetProperty(GroupDevicePropInfo.Name).GetValue(_newGroupDevice)); } } catch (Exception e) { Console.WriteLine(e); throw; } }
//private ThreadSafeSortedList<RequestPackage, C2CRequestPackage> _waitResponOutsideReqtPkg2CCReqtPkg = new ThreadSafeSortedList<RequestPackage, C2CRequestPackage>(); #endregion #region Group #region CreateGroup protected GroupDevice CoSynCreateGroup(string detail) { GroupDevice synGropDevice = null; try { synGropDevice = GroupCommunicateProcessor.CreateGroup(detail); } catch (Exception ex) { throw ex; } _localGroupDeviceBuffer.Add(synGropDevice); return(synGropDevice); }
public void RegistMessage(BaseMessageType typMsg, Type t_Msg) { mMessageFactory.RegistMessage(typMsg, t_Msg); GroupDevice group = null; try { group = mGroupCommunicateProcessor.CreateGroup(mDispatcherPrefixi + "_" + typMsg.Name + "_" + Guid.NewGuid().ToString()); mGroupCommunicateProcessor.JoinGroup(group, Communication.CommunicationConfig.GroupMemberRole.Speaker); }catch (Exception ex) { throw new Exception("试图注册消息时遭遇网络失败: " + ex.ToString()); } mSpeakMsgID2Group.Add(typMsg.Id, group); }
public GroupDevice AddNewGroupDevice(GroupDevice _GroupDevice) { try { using (var context = new VeraEntities()) { context.GroupDevice.Add(_GroupDevice); int numOfInserted = context.SaveChanges(); return(numOfInserted > 0 ? _GroupDevice : null); } } catch (Exception) { throw; } }
private void __AsynCoGetGroupRunning(KeyValuePair <string, GroupDevice> detailAnduncompletGroup) { GroupDevice synGropDevice = null; try { synGropDevice = _groupCommunicateProcessor.GetGroup(detailAnduncompletGroup.Key); } catch (System.Exception ex) { detailAnduncompletGroup.Value.excetion = ex as GetOnlineGroupExcetion; detailAnduncompletGroup.Value.Ready = false; } detailAnduncompletGroup.Value.Specific(synGropDevice); _localGroupDeviceBuffer.Add(synGropDevice); }
internal void ExitGroup(GroupDevice group) { if (!group.Ready || string.IsNullOrEmpty(group.Token)) { throw new ExitGroupExcetion((new NullReferenceException("Group token is null")).ToString()); } //配置请求包 ServerRequestPackage reqtPkg = new ServerRequestPackage(true); IExitGroupRequest reqtInterface = reqtPkg.Active_ExitGroupRequest(); reqtInterface.ExitGroup(group.Token); BinTransferLayer binprocessor = _mclLayerProcessor.BinTransferProcessor; ServerReplyPackage replyPkg = null; try { replyPkg = binprocessor.SynSendMessage(reqtPkg, 100000); } catch (Exception ex) { throw new ExitGroupExcetion(ex.ToString()); } IExitGroupRely replyInterface = replyPkg.Active_ExitGroupReply(); bool ret; string errorDetail; replyInterface.ExitGroupRet(out ret, out errorDetail); if (true == ret) { //该部分逻辑内聚到Group内部 //group.Joined = false; //try //{ // group.Referesh(); //}catch(RefereshGroupInfo ex) //{ // throw ex; //} } else { throw new ExitGroupExcetion(errorDetail); } }
private void __PerRadio_Elapsed(object sender, EventArgs e) { ParamPackage packageSended = PackMessage(); GroupDevice targetGroup = null; foreach (GroupDevice item in groupDeviceList) { if (item.Detail == comboBox14.SelectedItem.ToString()) { targetGroup = item; } } string radioOp = this.comboBox8.SelectedItem.ToString(); GroupComunicatePackage groupComunicatePackage = localDevice.CreateRadioCommunicatePackage(radioOp, packageSended, targetGroup); localDevice.Radio(groupComunicatePackage); }
//退出Group private void button5_Click(object sender, EventArgs e) { GroupDevice targetGroup = null; foreach (GroupDevice item in groupDeviceList) { if (item.Detail == comboBox7.SelectedItem.ToString()) { targetGroup = item; } } if (targetGroup != null) { localDevice.ExitGroup(targetGroup, (CommunicatType)comboBox6.SelectedItem); joinedGroupDevice = null; } }
//加入Group private void button4_Click(object sender, EventArgs e) { GroupDevice targetGroup = null; foreach (GroupDevice item in groupDeviceList) { if (item.Detail == comboBox3.SelectedItem.ToString()) { targetGroup = item; } } if (targetGroup != null) { localDevice.JoinGroup(targetGroup, (GroupMemberRole)comboBox4.SelectedItem, (CommunicatType)comboBox5.SelectedItem); joinedGroupDevice = targetGroup; } }
public void SendMessage(BaseMessage msg) { if (mSpeakMsgID2Group.ContainsKey(msg.Type.Id)) { GroupDevice group = mSpeakMsgID2Group[msg.Type.Id] as GroupDevice; try { mGroupCommunicateProcessor.Radio(new C2CMessageRadioPackage(group, msg)); }catch (Exception ex) { throw new Exception("试图发送消息时遭遇网络失败: " + ex.ToString()); } } else { throw new InvalidOperationException("未注册的消息类型: " + msg.Type.Name); } }
//创建Group private void button3_Click(object sender, EventArgs e) { GroupDevice groupDevice = localDevice.CreateGroup(createGroupDetail, (CommunicatType)comboBox2.SelectedItem); if (groupDevice != null) { groupDeviceList.Add(groupDevice); if (!comboBox3.Items.Contains(groupDevice.Detail)) { comboBox3.Items.Add(groupDevice.Detail); } if (!comboBox7.Items.Contains(groupDevice.Detail)) { comboBox7.Items.Add(groupDevice.Detail); } if (!comboBox14.Items.Contains(groupDevice.Detail)) { comboBox14.Items.Add(groupDevice.Detail); } } }
internal void GetGroupMembers(GroupDevice gropDevice, out List <CSCommunicateClass.ClientInfo> onlineGroupMembers) { //配置数据包 ServerRequestPackage servReqtPkg = new ServerRequestPackage(true); IOnlineGroupClientRequest reqtInterface = servReqtPkg.Active_OnlineGroupClientRequest(); reqtInterface.OnlineGroupClientRequest(gropDevice.Token); BinTransferLayer binprocessor = _mclLayerProcessor.BinTransferProcessor; ServerReplyPackage servReplyPkg = null; try { servReplyPkg = binprocessor.SynSendMessage(servReqtPkg, 100000); } catch (System.Exception ex) { throw new GetOnlineGroupClientExcetion(ex.ToString()); } IOnlineGroupClientReply replyInterface = servReplyPkg.Active_OnlineGroupClientReply(); bool ret; string errorDetail; try { replyInterface.OnlineGroupClientRet(out ret, out errorDetail, out onlineGroupMembers); } catch (Exception ex) { throw new GetOnlineGroupClientExcetion(ex.ToString()); } if (true == ret) { //nothing to do } else { throw new GetOnlineGroupClientExcetion(errorDetail); } }
internal GroupDevice CreateGroup(string detail) { //配置请求包 ServerRequestPackage reqtPkg = new ServerRequestPackage(true); ICreateGroupRequest reqtInterface = reqtPkg.Active_CreateGroupRequest(); reqtInterface.CreateNewGroup(detail); BinTransferLayer binprocessor = _mclLayerProcessor.BinTransferProcessor; ServerReplyPackage replyPkg = null; try { replyPkg = binprocessor.SynSendMessage(reqtPkg, 100000); } catch (System.Exception ex) { //throw timeout excetion throw new CreateGroupExcetion(ex.ToString()); } ICreateGroupReply replyInterface = replyPkg.Active_CreateGroupReply(); bool ret; string detailOrToken; replyInterface.CreateGroupRet(out ret, out detailOrToken); if (true == ret) { GroupDevice retGrop = new GroupDevice(_mclLayerProcessor); retGrop.Token = detailOrToken; retGrop.Detail = detail; retGrop.Ready = true; return(retGrop); } else { throw new CreateGroupExcetion(detailOrToken); } }
public GroupDevice UpdateGroupDevice(GroupDevice _GroupDevice) { try { using (var context = new VeraEntities()) { var oldGroupDevice = context.GroupDevice.FirstOrDefault(u => u.Id == _GroupDevice.Id); if (oldGroupDevice != null) { UpdateObject(_GroupDevice, ref oldGroupDevice); var numberOfUpdatedGroupDevice = context.SaveChanges(); return(numberOfUpdatedGroupDevice > 0 ? _GroupDevice : null); } return(null); } } catch (Exception e) { Console.WriteLine(e); throw; } }
protected void CoAsynExitGroup(GroupDevice group) { _asynExitGroupRunner.EnqueueMessage(group); }
protected void CoAsynJoinGroup(GroupDevice group, GroupMemberRole role) { _asynJoinGroupRunner.EnqueueMessage(new KeyValuePair <GroupDevice, GroupMemberRole>(group, role)); }
public void Listen(ClientDevice messenger, BaseMessageType typMsg) { if (mListeningDevice2MsgID.ContainsKey(messenger.Detail) && (mListeningDevice2MsgID[messenger.Detail] as List <uint>).Contains(typMsg.Id)) { throw new InvalidOperationException("该设备消息已被监听"); } C2CRequestPackage listenerVertificationRequestPkg = new C2CRequestPackage(mCoreLogicProcessor.SelfDevice, "ListenerVertificationRequest", true, new Dictionary <string, byte[]>() { { "MessageType", BitConverter.GetBytes(typMsg.Id) } }); RequestMTPackage mtReqtPkg = new RequestMTPackage(listenerVertificationRequestPkg, mCoreLogicProcessor.SelfDevice, messenger, true); //验证流程 MiddlewareTransferPackage mtReplyBasePkg = null; try { //100s limited time to wait this c2c response. mtReplyBasePkg = mMiddlewareCommunicateProcessor.SynSendMessage(mtReqtPkg, 10000); }catch (Exception ex) { throw new Exception("尝试监听一个设备消息时遭遇网络异常:" + ex.ToString()); } ReplyMTPackage mtReplyPkg = mtReplyBasePkg as ReplyMTPackage; C2CReplyPackage c2cReplyPkg = mtReplyPkg.C2CReplyPackage; if (Communication.Package.ReplyPackage.Middleware_ReplyInfo.S_OK == c2cReplyPkg.ReplyState) { //加入监听群组 string gourp_detail = Encoding.ASCII.GetString(c2cReplyPkg.ParamDefalutValues["group_detail"]); GroupDevice wilListenGroup = null; try { wilListenGroup = mGroupCommunicateProcessor.GetGroup(gourp_detail); mGroupCommunicateProcessor.JoinGroup(wilListenGroup, Communication.CommunicationConfig.GroupMemberRole.Listener); }catch (Exception ex) { throw new Exception("尝试监听一个设备消息时遭遇网络异常:" + ex.ToString()); } if (!mListeningDevice2MsgID.ContainsKey(messenger.Detail)) { mListeningDevice2MsgID.Add(messenger.Detail, new List <uint>()); } (mListeningDevice2MsgID[messenger.Detail] as List <uint>).Add(typMsg.Id); mListeningGroup2Device.Add(wilListenGroup.Detail, messenger); } else { throw new Exception("尝试监听一个设备消息时遭遇网络异常:" + Encoding.UTF8.GetString(c2cReplyPkg.ParamDefalutValues["excetion_detail"])); } }
public C2CMessageRadioPackage(GroupDevice targetDevice, BaseMessage msg) : base(targetDevice, "C2CMessageRadioPackage_" + msg.Type.Name, null) { mMessage = msg; }