private void Buffer_OnNext(ITracked<MPack> p) { try { var map = p.Value as MPackMap; if (map != null) { if (map.ContainsKey(CONST.HDR_CMD)) { MPack response = null; switch (map[CONST.HDR_CMD].To<string>()) { //case CONST.CMD_USER: // logCmd = "USER"; // response = User(p.Observe()); // break; //case CONST.CMD_AUTH: // logCmd = "AUTH"; // response = Auth(p.Observe()); // break; case CONST.CMD_OPEN: response = Open(p.Observe()); break; case CONST.CMD_CLOSE: response = Close(p.Observe()); break; case CONST.CMD_EXECUTE: response = Execute(p.Observe()); break; //default: // throw new ArgumentException($"Command {map[CONST.HDR_CMD].To<string>()} not recognized."); } if (response != null) WritePacket(response); } } } catch (Exception e) { p.Observe(); MPackMap err = new MPackMap(); err[CONST.HDR_STATUS] = MPack.From(CONST.STA_ERROR); err[CONST.HDR_VALUE] = MPack.From(e.Message); if (p.Value is MPackMap && ((MPackMap)p.Value).ContainsKey(CONST.HDR_ID)) err[CONST.HDR_ID] = p.Value[CONST.HDR_ID]; WritePacket(err); } }