예제 #1
0
        public void SendRigBusInfo()
        {
            var             ServerEp = new IPEndPoint(IPAddress.Any, 0);
            DirGreetingList dirList  = DirGreetingList.Instance;

            udpClient.EnableBroadcast = true;
            udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

            while (true)
            {
                try
                {
                    rigBusDesc.Time = DateTimeUtils.ConvertToUnixTime(DateTime.Now);
                    Byte[] senddata = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(rigBusDesc));


                    udpClient.Send(senddata, senddata.Length, new IPEndPoint(IPAddress.Broadcast, 7300));
                    var ServerResponseData = udpClient.Receive(ref ServerEp);
                    var ServerResponse     = Encoding.ASCII.GetString(ServerResponseData);

                    var dirService = DirectoryBusGreeting.ParseCommand(ServerResponse);
                    DirGreetingList.Instance.Add(dirService);

                    Thread.Sleep(HamBusEnv.SleepTimeMs);
                }
                catch (SocketException)
                {
                    Console.WriteLine("Timeout: Maybe DirectoryBus isn't running! ");
                }
                catch (Exception e)
                {
                    Console.WriteLine("Timeout: Maybe DirectoryBus isn't running! \nExceptions: {0}", e.ToString());
                }
            }
        }
예제 #2
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
 {
     if (reader.Value == null)
     {
         return(null);
     }
     return(DateTimeUtils.ConvertToUnixTime((long)reader.Value));
 }
예제 #3
0
 public void SendRigBusInfo()
 {
     while (true)
     {
         rigBusDesc.Time = DateTimeUtils.ConvertToUnixTime(DateTime.Now);
         udpClient.Connect("255.255.255.255", Constants.DirPortUdp);
         Byte[] senddata = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(rigBusDesc));
         udpClient.Send(senddata, senddata.Length);
         Thread.Sleep(3000);
     }
 }
예제 #4
0
        /// <summary>
        /// Scrobbles a single track
        /// </summary>
        /// <param name="artist"></param>
        /// <param name="track"></param>
        /// <param name="timestamp"></param>
        /// <param name="sessionKey"></param>
        /// <returns></returns>
        public static async Task <bool> TrackScrobble(string username, string password, string sessionKey, string artist, string trackTitle, string albumTitle, DateTime playbackStartTime)
        {
            bool isScrobbleSuccess = false;

            string method = "track.scrobble";

            var data = new NameValueCollection();

            data["artist"] = artist;
            data["track"]  = trackTitle;
            if (!string.IsNullOrEmpty(albumTitle))
            {
                data["album"] = albumTitle;
            }
            data["timestamp"] = DateTimeUtils.ConvertToUnixTime(playbackStartTime).ToString();
            data["api_key"]   = SensitiveInformation.LastfmApiKey;
            data["sk"]        = sessionKey;

            data["api_sig"] = GenerateSignature(data, method);

            string result = await PerformPostRequest(method, data, false);

            if (!string.IsNullOrEmpty(result))
            {
                try
                {
                    // http://www.last.fm/api/show/track.scrobble
                    var resultXml = XDocument.Parse(result);

                    // Status
                    string lfmStatus = (from t in resultXml.Elements("lfm")
                                        select t.Attribute("status").Value).FirstOrDefault();

                    // If Status is ok, return true.
                    if (lfmStatus != null && lfmStatus == "ok")
                    {
                        isScrobbleSuccess = true;
                    }
                }
                catch (Exception)
                {
                    // Swallow: check for isScrobbleSuccess = true
                }
            }

            return(isScrobbleSuccess);
        }
예제 #5
0
        private IPEndPoint SendUpdateResponse(IPEndPoint ServerEp)
        {
            Byte[] senddata = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(rigBusDesc));
            rigBusDesc.Time = DateTimeUtils.ConvertToUnixTime(DateTime.Now);

            udpClient.Send(senddata, senddata.Length, new IPEndPoint(IPAddress.Broadcast, 7300));
            Console.WriteLine("Sending Data");
            var ServerResponseData = udpClient.Receive(ref ServerEp);
            var ServerResponse     = Encoding.ASCII.GetString(ServerResponseData);

            Console.WriteLine("Recived {0} from {1} port {2}", ServerResponse,
                              ServerEp.Address.ToString(), ServerEp.Port);
            var dirService = DirectoryBusGreeting.ParseCommand(ServerResponse);

            DirGreetingList.Instance.Add(dirService);
            Thread.Sleep(3000);
            return(ServerEp);
        }
예제 #6
0
        /// <summary>
        /// Scrobbles a single track
        /// </summary>
        /// <param name="artist"></param>
        /// <param name="track"></param>
        /// <param name="timestamp"></param>
        /// <param name="sessionKey"></param>
        /// <returns></returns>
        public static async Task <bool> TrackScrobble(string sessionKey, string artist, string trackTitle, string albumTitle, DateTime playbackStartTime)
        {
            bool isSuccess = false;

            string method = "track.scrobble";

            var parameters = new Dictionary <string, string>();

            parameters.Add("method", method);
            parameters.Add("artist", artist);
            parameters.Add("track", trackTitle);
            if (!string.IsNullOrEmpty(albumTitle))
            {
                parameters.Add("album", albumTitle);
            }
            parameters.Add("timestamp", DateTimeUtils.ConvertToUnixTime(playbackStartTime).ToString());
            parameters.Add("api_key", SensitiveInformation.LastfmApiKey);
            parameters.Add("sk", sessionKey);

            string apiSig = GenerateMethodSignature(parameters, method);

            parameters.Add("api_sig", apiSig);

            string result = await PerformPostRequestAsync(method, parameters, false);

            if (!string.IsNullOrEmpty(result))
            {
                // http://www.last.fm/api/show/track.scrobble
                var resultXml = XDocument.Parse(result);

                // Status
                string lfmStatus = (from t in resultXml.Elements("lfm")
                                    select t.Attribute("status").Value).FirstOrDefault();

                // If Status is ok, return true.
                if (lfmStatus != null && lfmStatus.ToLower() == "ok")
                {
                    isSuccess = true;
                }
            }

            return(isSuccess);
        }
예제 #7
0
        public void SendRigBusInfo()
        {
            //https://stackoverflow.com/questions/2281441/can-i-set-the-timeout-for-udpclient-in-c
            int             count      = 0;
            var             timeToWait = TimeSpan.FromSeconds(10);
            var             ServerEp   = new IPEndPoint(IPAddress.Any, 0);
            DirGreetingList dirList    = DirGreetingList.Instance;

            udpClient.EnableBroadcast = true;
            udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
            while (true)
            {
                try
                {
                    dataBusDesc.Time = DateTimeUtils.ConvertToUnixTime(DateTime.Now);
                    Byte[] senddata = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(dataBusDesc));


                    udpClient.Send(senddata, senddata.Length, new IPEndPoint(IPAddress.Broadcast, 7300));
                    Console.WriteLine("Sending Data {0}", count++);
                    var ServerResponseData = udpClient.Receive(ref ServerEp);
                    var ServerResponse     = Encoding.ASCII.GetString(ServerResponseData);
                    var dirService         = DirectoryBusGreeting.ParseCommand(ServerResponse);
                    DirGreetingList.Instance.Add(dirService);
                    Thread.Sleep(3000);
                }
                catch (SocketException se)
                {
                    HamBusEnv.Logger.LogInformation($"Socket Error!  Maybe Directory Bus isn't running.\n {se.Message}");
                }
                catch (Exception e)
                {
                    HamBusEnv.Logger.LogInformation($"socket {e.Message}");
                    // Console.WriteLine("Exception: {0}", e.Message);
                    //infoThread.Abort();
                }
            }
        }
예제 #8
0
파일: ORig.cs 프로젝트: haminteropt/omnibus
        private OmniRigInterface()
        {
            OmniRig = new OmniRigX();
            OmniRig.ParamsChange += ParamsChangeEvent;
            RigX.Add(OmniRig.Rig1);
            RigX.Add(OmniRig.Rig2);
            RigStatePacket rigState = GetRigState(1);

            sendRigBusState(rigState);
            var rigBusInfo = OmniRigInfo.Instance;

            rigBusInfo.Command        = "update";
            rigBusInfo.RigType        = OmniRig.Rig1.RigType;
            rigBusInfo.TcpPort        = netRunner.listenTcpPort;
            rigBusInfo.UdpPort        = netRunner.listenUdpPort;
            rigBusInfo.Id             = Guid.NewGuid().ToString();
            rigBusInfo.SendSyncInfo   = true;
            rigBusInfo.MaxVersion     = 1;
            rigBusInfo.MinVersion     = 1;
            rigBusInfo.SendSyncInfo   = true;
            rigBusInfo.Name           = "OmniRigBus";
            rigBusInfo.Time           = DateTimeUtils.ConvertToUnixTime(DateTime.Now);
            optState.newStateDelegate = SetRigOptState;
        }