From 95dcc486287b7c555fd5383012a3d5c8537ecb0a Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Mon, 26 Jun 2017 12:03:05 -0600 Subject: [PATCH] Added action type to handle press and hold button models --- .../PepperDash_Essentials_Core.projectinfo | Bin 1286 -> 1286 bytes .../Essentials_DM/Essentials_DM.projectinfo | Bin 1135 -> 1140 bytes .../Essentials Devices Common.projectinfo | Bin 1158 -> 1158 bytes .../PepperDashEssentials.projectinfo | Bin 1855 -> 1860 bytes .../Room/Cotija/CotijaRoomBridge.cs | 25 +---- .../Room/Cotija/CotijaSystemController.cs | 99 +++++++++++++----- 6 files changed, 75 insertions(+), 49 deletions(-) diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo index 9fdf18f46f447e4158ac4906f19139548e94edcf..66eccd5fb40f3d921915c0e82a651e0d5f316f64 100644 GIT binary patch delta 1112 zcmV-e1gHCk3Wf@hy?;;N?Cw6gzx!xscYN>OgT03jKc$Z!?d(vyIkh`^^!xt4->vGm z#quJ3TGaWpt?D9ge&65M_4oV!zOR4$_x*iy+v)H7`#Jhh`esrr{ja;Y zkEg5h2ZTytsq(U}ewwg2Tb@_XiZWkji~NUx<^~K`f>1#S5r3j*4RzmMo2h$!-L(1Q zg&?_cifCLHb+$O0y~!?a*>;iFGNH$_SvpwnUuNykKDSeEUu4VTJa1Zu>OK1OM*c9A_#!Ko z$Mn@=QeHa{`}B=BYa77K%97d!l%W6iKE1cM_fd~vT}pkMAkt^Eo!$M1(@8e@G=KQ% z!-v_u+3w`Qy@ScUPw&m92fLqAOPQ-%jYtW9bHnG=G=D39DARN^UkVwY=Bs=;%a>E? z`lCnRGqZ6&oQ;#3rn|0|&cBAlto?EHQ+pIe56cyLT|zo!w@p49H-5 zZUOiMr^j^r|Kd4$aH}~vZRdHt%v&;Fi}kXYW-x?JI8XOJ%|HG0-u}Y}yASX0?(gLJ zr{}wq{d_XLfA9Q$o;|q5JZ*JpzNp%~GlALp-lzG_ zWbfY2{@%m<(}#Q0*}eNa`SjC!(}z0`CiyKUFoYY-*e#%c*o=jJ|G#*O9^Pt-zB&tM zXXoJIz1_WRXFA!L?BBolVCTW!j2M3J-hTdIH{ZF<>{yV&#M}b#hfR#__W#9mvbz&b zihnm$&lypQ?LE9lW_{;VV&#Xk`v;Rx?>~Gv$+J)Svn=27ry>q0n1EY=yX6GLJNth# z*>^*-JH~mDU$vxgtMiWE_HerMaC(1sZ)cX}v)SzY;Nku0y-&00u{?7f` zET7H}vIhtEX8V%|_xE-m+~3)qP9_fq=4TLUFg>?`{od0v*z^DUW~cLkovTiwz)_9u zY1U@rS=PGQIoR8oe7ZZ`KbRh5ds7=nH4$A$6#xKNBZR^L delta 1112 zcmV-e1gHCk3Wf@hy?=XecJDvB_u$dqr{hoeKHdHF;XV5J(asLFn^U`!N5Ajy``xO3 zTP!cqr$wDl+o~?|=J)-5U4Ost@B8}4f8XCXx1IjJzpq0e1pHO|(*L@P z`*^x4e?X`dmMSmn>Zb{dv*mg9tSIwkw#a`7Xl}r8B?uLS5PuBDwVArt*G-!* zUI>yKr-;UNQD=*@*_-U*mTeb#Efab?n-y(QEwd72kU$OzKjN55qB(HF(CSgaS%ih6OC z)%j0S3!)LkY=6A7^N{|(_mF^pxo%hM_GQ-o>~lNy_C>ZV&hw^qsNSPbZ{!a{i7&EZ zc}!m|CgrsQu}|N4v$g@utSqT*KneP9@6&sGdmr@()}_?92_k(q+u7ZJIGtpZPxFVL zK75$no9#{>+&h@u`}E#yda(N`wUoKK)rgevH#dAF&dw`w!1|vi#ou{)2my^VyzH;P-$o@7%tR+s(|Q_rTzXJca!!`u^ynS9!y9 z;6H!K$bU@Qr?;E5FT$Cc%+Bv;)AQ_LXF9z%nH)Sg-`kz#lY@u5yL$(d-Pvts%76@} z=N5oJaC%I)|1X}C2e+D&({`TM%e*D?wOB8UX$C{sg!6Ro)BMv<@9jT)u>0`-?*2}m ze|o+<+0Q4_`}fZ8=h=f>%+tnhg1NgzXCF3q8-G#xfAM@C+-g2w<%_D#I}@0l?|qu@ zO!n^W?C(9yKYh42o!z^?lTSarH+{JCV3OZr0zFcBYe^$^QL&4|X2x&4}Um?(OFfcJrOv%#H;aOw26+f7ry>ZvS6AC%Zf0 zqt0mZ4akA52yEM_jYDkKAX+X4<6p1-upD0PR_GwzB9Y;(|!ZA zU;=Id^Oh5^p~wF>&%)l&EWFCkON8Ck@_%gE<~8UMPDg(4{QMxFO(xmF{&YHfuzUah zU5Q*kE360sOt^Ww`7AH&4*Lp$U5Z6VJb$m(qaDQ+2!Tp`x>16U?V15Rn2Ges3*zY|(gFXMhZ+1E#*tzN?3Q^qH zo@Q+}o@K3@orArd$)~&1{e$U2wl}509_&55{~*t2#P0VVJeUp`k{AtdP3#UWBk28- e@Bflt!ugBhT>V}e=elfV*#8gds}YY!6#xKw(t#)d diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo index 3811ad6a92d71ad67dfca18d4c695b2f238fc8ae..a1d68468ae29e099cc28d5dcff2e3600679ef21d 100644 GIT binary patch delta 528 zcmV+r0`L9r2=oY$u@v{|o88?<_je!dJQzQG@ZkP~y@#>IFaa;S5AWaG`>02sE@8e+ z@aVJIEc{A zi&go0p4BT7!12@kvY6(t*Q-@kw+c|HInAe|F!TH|qET0@a+}+(fAPKn5)EJP#eB1)?2hE4+^#5Ix@L*6!om6!m zl78>uJ!06MPw(yQKb+k^n0$Kw;loKzdIz6n`HoNeIG}*ww*Yr5g2%i1e;1h#2FdKf z?NfZVv%CLrI>{!V<_|x8_%ORS+nqePcQCp4>Al(XVE2F10gA_A2E@Mwyi^HxEukU*uP9wQQ>MjwN_F-FY~@KfAXx%ktT5c7E{i{`B6b*>rNAP4k`EeSZcv zKnrMp3z)Z}{f7Sj-$nJ^oguQn%Fj!9*wylE+2%C}5Yj)tcYc15&nA=XV1GKDJ=nc} zfAa9*!G16P>4W`)gGpeCZv!@%h+6=E&xsiB`2S@yvO6>*uYcnCxAT&)7?_aro$39Z S`?Hhq19u2ONFF=F5C8zB$}WTe delta 523 zcmV+m0`&d#2=54xu@raj&F=k2_Z~dDcW->}-tOMs-lws}Faa=opWfTM|51-VUBY~u z;L&IIA58Q8g9qn3pWdI|+qpl>W)F8i-QCIdXL-JtJ^YlDBmyOWc#zGPf|};Fu9oB1 z#bQ;yo@e!n1aSN`zbvNt>-B0?)vW?lYEH8(-=FO7-G7*6=b!FA+`0eod?(BA?e9Oh zH#wi}`P6(5=ZGdk zko0>G?-9f9e0pzZ|KaTZ!Q|8X4{I?M%XfUz#{mTdzXiBk5j@`2|GUV1a2r$5 zr}%7VcmLsZl1)C%AAb7qVRmn}J9%*LU~=!%d$Z}m?k%)``VjGN0r`E2AMf@5UGo5o z>CJ-^(HHquTP>UFykiL-PIn$o@6Yb-%(8qoo1Gs#B>VblHl3Vj(|l)k-=BdE&;r`u z0_Lq~zoEbXcTs(JXNc^t^79fNcC|cPws{Q#g!Iqvou41%v&keo*q=^k4|eb0pFDhc zu%CbWVE^DLU=mp3+kg!w;ugT)b0UU2{(sqw><-Py>z{c3?Ytx`1}5ZuXL_If%aip3 NcL-DY@36uU000_3EK>jg diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo index f4662abf78b01051303d85f68a8750327185dc30..08ced49865194415a2fe09206b48a150d25d7694 100644 GIT binary patch delta 978 zcmV;@11+1-6~fA`VO{`k`ed-orHx!(>W|9yYo*FXOI{=T{G`S<;O2eI7v)uh<;{dl@6 ze?UkTmM|~t>Zb{xv*mg9tSIwkw#a|D2oK}B64VMpjZi*o2!E0G+RWqY>!!^YF9h99 z6G{WTsI$e{>`itNG!5ofTP^ZhX7_kDE83!3W+f;ipApCvk!bei@|II?Uii5o?Cm(= zbTP?iud8)E&5!HpytvFQYn)W8>o?W2s+{F@^U)(CSbHD+lF>(B6w6|?Q{$zcB^wF!lVT$mdzhq>l@6%gN z-{)DIUw>uSO*nH8_V)MkJraiO-ogI8y}g6%{_NpyKKb<1gT0662iYxVt^+ujv|E7x zph@fW{r`>mdJxW+!{_%usp>qOpS_3oi0OAey|=UfaCZM-^6CAD4<~u{DSwvbJO2E{ z0R{7M3vjoak9c4I-=P1&ApKn*k*S#N?Cw9DPJgn=r}@KAA3n_P&2}db?j20-eR^*; zJ=pzpU@GD;gIT!+?KtZ-Si2zsRrJYS~oh9sBcey7O>)e|B$YmgTeA z?EK*2{pr0=v+3kKo8~*S`~K8yfEG;3EnwbmQZ{t>|BdO`-5HvXSNVB~;G$ZdE!(^X zWq-nn$?u(?ALO&iBs*fBInm;9wFs2Dbql%+M`>zwZnU_x%5n zsoEWys@Fg9{M&g+*bU6o`OftI&i&aepUw`l2M70N`;!Ov_jVuL-`Sl`CJzQ?Y7lBL zQMZ8oz7sXr@&Bvmsq=xIwY{NPdz!V`cuSVGZk`VIb|#U`Q(b&)r}@9+CEU#;@`Y1Yht-{1H3kN>{EZ*F`3eShCUEH{2NDK>pSp03It z5K@ID%*(p^X~O4hd0ss$%6yqE@*gh3!?>;lwSrJ1l+PMMq<_6O^Z5F@Y4gPkL3h)H z(f}{&Y;iVwlU)Q&gSpjKi@cWEJ)X^qwy2g_3ChT41ad_rnti#v<3zxR-Uf4Oc~>-J^V{!oR0I{qSC7Uy}>I;`)}r#Eqnp~)9nu{@?m zi%EIyAnemO-b@ZdnUy6q4M;-&?R|Q04@h(<*CpAvi3}j}!%q)(cFxat@8{pWLI*vTTyw�wL+HJ<86L4d@=hZYTf7r8iBY&d`IiKdMd^yXPQ$pgSN8dA( zazC7ulbR;Irk7q9i&go0p4BUo?6E+6ybNm=xLVa`;+~>`wz41{L|fsJNF-+ z?_~MC{rv~`Cg-y~pV03CUEaBUAGeyKNAH2a&)r=1C+qv8k6z^sQ-uHgB_lI^pWbTv zKF`|xDu26f!kK%px4)O~?e1mSy@UOGdwU1j{n^9aeDdk12YV0C4+0Un9pGTnZUO#- zCau%=|2O9AK{#IypWpwas`GGu_8#6Nrr-JW-p>BR+5Lmbr}rN|oaEW3{8^Uo`12D7 z6wJphz};>>;(h&pgZ>AD^mlzkree0UyZ>-H$$uuF<_|x8_%ORS+nqePcQCp4>Al(X zVE5C3sffc2X5|);-+NZ#-Tr@Lf?&eE334L;BEM>@WmBDZ?9apL&co^b*}a`vmd|Fh z^Mi-?r}sY1rjzq*n(xf+`%|+4S}-ZMfO)$~+0fztH>P8EXJ|fN<>w`Wi)wkcZ1WnF z34bRhzjuCqkk2NQ>|lR7ojusSe}D4u;lY0X>4W`)gGt~R+y-ngL$?6_zB4r3^Z!St zYIkU=UjM}NZ|5apH!xG@JJb6+_h++wIy=Z79Ne4jPafRg+kJ3|F52>&IfkZ_J(HdY1U@rSxeTsc{8_x*icPrvW)`})U!-`_X4{r$ebuj|`y=YKjWmhrE~)71~C>%xxw zWnKL=^?J5EubvfUzRVW+&mLM)j8=j{K^PEbXASk&UYq%NeSh7w`Qn9OH9&nD!bP1e z&Sr12iyK=l@>*u;cs48AqFQDp#x9?oRErf6VfN+nmQ!e6_}M4jO*4ABnB=q9)w-VM z$MtkxT;_I)PpZ}Ro9bCr&honX=#i0ty^ns$=%X)+WwBTg0=TS)Auh>oB}WpKh3X9r+hou{@>^7nAbZy}M7} zc(W3He^!>%Di|~UxBKw^J-po^O_wI$CRp^@d3G;*u>0`f-t@u!PxHO~?7@Tco%4M6 zoc`P2dk8=>E1L(QwB69+c{R<-pUo-Q#A8CKr}-*h&VTadl=}MU(f16g?}wy5sc91H zYB_#gELP>~c~-AT_Qp^1%VL_pUawYF-6}w(;WW$g{mK5`{fAk0{^{<+o%;{Zce4E6 z{{Dk|lk?f0Ps8_sF7MpFj~nLT(R+0L!3?~4urro zgVT1N*UP*m+p<_Mi)jWcWkgWPckk2u(@*d1KP1g_e|LW;&p$oio$Tk6>HT}>_w($* zE#_roH^E%pqO-3#R~vEof8YEa+-m-wtzk~W`AFKE=95qN?`O07S+?`=;QYbCbbs>c z^x>!Xvh%&!`E4{@05+JPTLAx>^Aq&>|GxQnc&qvNJZtl-?7AaC5BB!=^1a=?EW49< z13Z62zEl3`!@cS3-u<0?`suyt!<`3{{1&qk!VM`=Z#5@horTk} zbMWvU@$k-cvNPGgfA7K0gS{Ck{=Iwq`Gehj=Qh(}K?XB%3&3A;9Egn9&_weCt_8`AE{WO2ec4s>W5BBcuPKbsN{Ykh9WH1T00DRLV z+|=Ly3n$@TI0+8uNmb`B$%W6#*VoHwI0p~2$-R6!&4@?$_a035cJ3eC`*iwge((JJ z;9Gd3~NuyW%k0fADZOJNR_=>G`J*X0z$Norlx?Y_dzazA1&p{zTk=4sd5aZUleR zeB7?r{})b6C!F@iv2NOGaoo0bF>>d!J_03C6iIyC0{24_ZeOZiIPz()YUhe<9U75px)2=I?Sx?(_3c z4{{1xAAU;F>+E1}hcZ9=d%F)Pv7P04b{;3U0~65s7Qk*#XV=Gn{|gD+iH054uk!N} z3&PcMK)-N!l+PxU>|lR7ojusSe}D4u;lY0X>4W`)gGrE0?ShSg4JP0gz;8bR!$bLh z;e>P|V>gP|KkG+{ delta 1592 zcmV-82FLlt4!;hNwtx5D?B0KL?*aX9{9ymndk^!&>`=QowL5wA`~JS)t?IYM z@*;g&)cLfn>LPD`-{05u^!xt4uYdga{e5%W-|zeTy1xB({-={-8UJcLUHyQ%F6_u( z*40l_uV>5i>RD0d%WRSV?4cFKXeAgFgaKi8)=+=#wV99C*MCi$FJ1^%1JtJ>T-4d( zZ1yI*xUtnDuVt2wXS1R$s%2JU?DE-3wOA1mW?wFEIfdqhpMBEZG^3}BNj`gBt?Oxi zTu4vG-k$;gD%VYX*F)6RzyZiKw zH!IQiXJtvPf-%#7d!OFhd+A@%)`)F(Af zVqGoAuZzX1d_B+V70KTCX?|Hu^VjRus;XNBs5G2rS-wBn-@E@X%g#UDeYkV~;rULM z-`n4RaBp%x+w*Do9?<2T+xKz996WlDu75a_)t{2@k3M>pH#~0s^OuawBz=0jN%|t3 znaS+@et$MS&klB`(|eQ2!GrU?-B~_40J|Sdc4xPl83Qtyj#~i!y3=9$`+wgYJh;^y zoVN44Ugj;?mc@EmOfy(1BZ5l4d!Oc?etK{J;e*|W_jmVq^8C~D-N}AFncgS;lV=ZZ zF)tgt3Fhh+oqf%@+K9vd`{wW9R`d644RaFC*GJwopM1K1KbzgpvYm$q=MN61`;$+n z4?n$^o$t-gZ=>M?u)+M?0{GXQpPIEUpObbx0;i$&cf-~ zIe2)Fcz91>mna6Slwq7f!-nI0+6^ zDn4YB!Vvas$HPw#c6QFsckk!t2YY*y-GBRgpWdI`qtCKzlHCt9)lDEnyKyt%n6ga!vryZ4kR=NUZw~%n9Cq(^;%?_KoYdE=7HQ$t{Q7L! z=Jk0t?TW)}|G~rE?BLVcr{|wOn9Yc452yRtWH;a2pHf)tPsHti0EaShGx(e4<95CN zzi?VQ;j}l7b<7f$(r2ifvF)vP4;K|)BC#*Ns-^r&L8gV?0%ZhrrF-?(@!T4 z2d3r*;GuoKxr_Iho*R1pf8i8$B5XI7Z|5a}ADEadpFP;iCp$SMj40nqS)xxL>>Nz; z2cPcm-=9rq@rj9lgA4<>n*rZ`I^zBPzi$%uI`Om{!HfK=rF>a+-pQvwoRSi`KfAXx zBZAFl&gy|Y+bf8(EkUMhnuyCBLDyuw}#FD diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaRoomBridge.cs b/Essentials/PepperDashEssentials/Room/Cotija/CotijaRoomBridge.cs index 570216f4..e8e468fa 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/CotijaRoomBridge.cs +++ b/Essentials/PepperDashEssentials/Room/Cotija/CotijaRoomBridge.cs @@ -23,8 +23,8 @@ namespace PepperDash.Essentials // Source Changes and room off Parent.AddAction(string.Format(@"/room/{0}/status",Room.Key), new Action(() => Room_RoomFullStatus(Room))); Parent.AddAction(string.Format(@"/room/{0}/source", Room.Key), new Action(c => room.RunRouteAction(c.SourceSelect))); - Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeUpBtn", Room.Key), new Action(b => room.CurrentVolumeControls.VolumeUp(b))); - Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeDownBtn", Room.Key), new Action(b => room.CurrentVolumeControls.VolumeDown(b))); + Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeUpBtn", Room.Key), new PressAndHoldAction(b => room.CurrentVolumeControls.VolumeUp(b))); + Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeDownBtn", Room.Key), new PressAndHoldAction(b => room.CurrentVolumeControls.VolumeDown(b))); Parent.AddAction(string.Format(@"/room/{0}/event/muteToggle", Room.Key), new Action(() => room.CurrentVolumeControls.MuteToggle())); Room.CurrentSingleSourceChange += new SourceInfoChangeHandler(Room_CurrentSingleSourceChange); @@ -202,25 +202,6 @@ namespace PepperDash.Essentials public string SourceSelect { get; set; } } - //public class PostMessage - //{ - // [JsonProperty("type")] - // public string Type { get; set; } - - // [JsonProperty("content")] - // public JToken Content { get; set; } - //} - - //public class RoomStatusMessageContent - //{ - // [JsonProperty("selectedSourceKey")] - // public string SelectedSourceKey { get; set; } - // [JsonProperty("isOn")] - // public bool? IsOn { get; set; } - // [JsonProperty("masterVolumeLevel")] - // public int? MasterVolumeLevel { get; set; } - // [JsonProperty("masterVolumeMuteState")] - // public bool? MasterVolumeMuteState { get; set; } - //} + public delegate void PressAndHoldAction(bool b); } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs b/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs index 7ddffbd6..3f038bac 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs +++ b/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs @@ -24,22 +24,28 @@ namespace PepperDash.Essentials HttpClient Client; - Dictionary ActionDictionary; + Dictionary ActionDictionary = new Dictionary(); - CTimer Heartbeat; + Dictionary PushedActions = new Dictionary(); - CTimer Reconnect; + CTimer ServerHeartbeat; + + long ServerHeartbeatInterval = 20000; + + CTimer ServerReconnect; + + long ServerReconnectInterval = 5000; string SystemUuid; public List CotijaRooms { get; private set; } + long ButtonHeartbeatInterval = 1000; + public CotijaSystemController(string key, string name, CotijaConfig config) : base(key, name) { Config = config; - ActionDictionary = new Dictionary(); - CotijaRooms = new List(); CrestronConsole.AddNewConsoleCommand(RegisterSystemToServer, "InitializeHttpClient", "Initializes a new HTTP client connection to a specified URL", ConsoleAccessLevelEnum.AccessOperator); @@ -177,7 +183,7 @@ namespace PepperDash.Essentials Client.DispatchAsync(request, (r, err) => { if (r != null) { Debug.Console(1, this, "Status Response Code: {0}", r.Code); } }); - StartReconnectTimer(5000, 5000); + StartReconnectTimer(ServerReconnectInterval, ServerReconnectInterval); } catch(Exception e) { @@ -194,11 +200,11 @@ namespace PepperDash.Essentials if(SseClient != null) SseClient.Disconnect(); - if (Heartbeat != null) + if (ServerHeartbeat != null) { - Heartbeat.Stop(); + ServerHeartbeat.Stop(); - Heartbeat = null; + ServerHeartbeat = null; } } @@ -213,11 +219,11 @@ namespace PepperDash.Essentials { if (resp != null && resp.Code == 200) { - if(Reconnect != null) + if(ServerReconnect != null) { - Reconnect.Stop(); + ServerReconnect.Stop(); - Reconnect = null; + ServerReconnect = null; } if (SseClient == null) @@ -242,24 +248,24 @@ namespace PepperDash.Essentials /// void HeartbeatExpired(object o) { - if (Heartbeat != null) + if (ServerHeartbeat != null) { Debug.Console(1, this, "Heartbeat Timer Expired."); - Heartbeat.Stop(); + ServerHeartbeat.Stop(); - Heartbeat = null; + ServerHeartbeat = null; } - StartReconnectTimer(5000, 5000); + StartReconnectTimer(ServerReconnectInterval, ServerReconnectInterval); } void StartReconnectTimer(long dueTime, long repeatTime) { // Start the reconnect timer - Reconnect = new CTimer(ReconnectToServer, null, dueTime, repeatTime); + ServerReconnect = new CTimer(ReconnectToServer, null, dueTime, repeatTime); - Reconnect.Reset(dueTime, repeatTime); + ServerReconnect.Reset(dueTime, repeatTime); } @@ -313,15 +319,15 @@ namespace PepperDash.Essentials if (type == "hello") { - Heartbeat = new CTimer(HeartbeatExpired, null, 20000, 20000); + ServerHeartbeat = new CTimer(HeartbeatExpired, null, ServerHeartbeatInterval, ServerHeartbeatInterval); Debug.Console(2, this, "Heartbeat Timer Started."); - Heartbeat.Reset(20000, 20000); + ServerHeartbeat.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval); } else if (type == "/system/heartbeat") { - Heartbeat.Reset(20000, 20000); + ServerHeartbeat.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval); Debug.Console(2, this, "Heartbeat Timer Reset."); } @@ -330,9 +336,9 @@ namespace PepperDash.Essentials SseClient.Disconnect(); // Start the reconnect timer - Reconnect = new CTimer(ConnectSseClient, null, 5000, 5000); + ServerReconnect = new CTimer(ConnectSseClient, null, ServerReconnectInterval, ServerReconnectInterval); - Reconnect.Reset(5000, 5000); + ServerReconnect.Reset(ServerReconnectInterval, ServerReconnectInterval); } else { @@ -345,20 +351,59 @@ namespace PepperDash.Essentials { (action as Action)(); } - else if (action is Action) + else if (action is PressAndHoldAction) { var stateString = messageObj["content"]["state"].Value(); // Look for a button press event if (!string.IsNullOrEmpty(stateString)) { -#warning deal with held state later - if (stateString == "held") - return; + switch (stateString) + { + case "true": + { + if (!PushedActions.ContainsKey(type)) + { + PushedActions.Add(type, new CTimer(o => + { + (action as Action)(false); + PushedActions.Remove(type); + }, null, ButtonHeartbeatInterval, ButtonHeartbeatInterval)); + } + // Maybe add an else to reset the timer + break; + } + case "held": + { + if (!PushedActions.ContainsKey(type)) + { + PushedActions[type].Reset(ButtonHeartbeatInterval, ButtonHeartbeatInterval); + } + return; + } + case "false": + { + if (!PushedActions.ContainsKey(type)) + { + PushedActions[type].Stop(); + PushedActions.Remove(type); + } + break; + } + } (action as Action)(stateString == "true"); } } + else if (action is Action) + { + var stateString = messageObj["content"]["state"].Value(); + + if (!string.IsNullOrEmpty(stateString)) + { + (action as Action)(stateString == "true"); + } + } else if (action is Action) { (action as Action)(messageObj["content"]["value"].Value());