public override ulong hash(object key) { Int64 i, j; Int64[] hh = new Int64[8]; string value = key.ToString(); var T = new[] { // 256 values 0-255 in any (random) order suffices 98, 6, 85,150, 36, 23,112,164,135,207,169, 5, 26, 64,165,219, // 1 61, 20, 68, 89,130, 63, 52,102, 24,229,132,245, 80,216,195,115, // 2 90,168,156,203,177,120, 2,190,188, 7,100,185,174,243,162, 10, // 3 237, 18,253,225, 8,208,172,244,255,126,101, 79,145,235,228,121, // 4 123,251, 67,250,161, 0,107, 97,241,111,181, 82,249, 33, 69, 55, // 5 59,153, 29, 9,213,167, 84, 93, 30, 46, 94, 75,151,114, 73,222, // 6 197, 96,210, 45, 16,227,248,202, 51,152,252,125, 81,206,215,186, // 7 39,158,178,187,131,136, 1, 49, 50, 17,141, 91, 47,129, 60, 99, // 8 154, 35, 86,171,105, 34, 38,200,147, 58, 77,118,173,246, 76,254, // 9 133,232,196,144,198,124, 53, 4,108, 74,223,234,134,230,157,139, // 10 189,205,199,128,176, 19,211,236,127,192,231, 70,233, 88,146, 44, // 11 183,201, 22, 83, 13,214,116,109,159, 32, 95,226,140,220, 57, 12, // 12 221, 31,209,182,143, 92,149,184,148, 62,113, 65, 37, 27,106,166, // 13 3, 14,204, 72, 21, 41, 56, 66, 28,193, 40,217, 25, 54,179,117, // 14 238, 87,240,155,180,170,242,212,191,163, 78,218,137,194,175,110, // 15 43,119,224, 71,122,142, 42,160,104, 48,247,103, 15, 11,138,239 // 16 }; for (j = 0; j < 8; j++) { int h = T[(value[0] + j) % 256]; for (i = 1; i < value.Length; i++) { h = T[h ^ value[(int)i]]; } hh[j] = h; } var bytes = hh.Select(h => System.Convert.ToByte(h)).ToArray(); return (ulong)System.BitConverter.ToInt64(bytes, 0); }
/// <summary> /// SMS sending /// </summary> /// <param name="phone">Phone numbers</param> /// <param name="originator">Sender name</param> /// <param name="text">Sms text</param> /// <param name="sendingTime">An optional parameter, it is used when it is necessary to schedule SMS messages. Format YYYY-MM-DD HH:ii</param> /// <returns>Results list</returns> public List<MessageSendingResult> SendMessage(Int64[] phone, string originator, string text, string sendingTime = null) { var parameters = new NameValueCollection() { {"phone", String.Join(",", phone.Select(p => p.ToString()))}, {"sender", originator}, {"text", text} }; if (sendingTime != null) { parameters.Add("sendingTime", sendingTime); } try { var content = GetStreamContent("send", parameters); var settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }; var messages = new List<MessageSendingResult>(); var serializer = new DataContractJsonSerializer(typeof(Dictionary<Int64, MessageSending>[]), settings); var items = serializer.ReadObject(content) as Dictionary<Int64, MessageSending>[]; if (items == null) return messages; foreach (var one in items) { var item = one.First().Value; item.Phone = one.First().Key; if (item.Error == 0) { var success = new MessageSendingSuccess { Phone = item.Phone, MessageId = item.MessageId, MessagesCount = item.MessagesCount, Cost = item.Cost, Currency = item.Currency }; messages.Add(success); } else { var error = new MessageSendingError { Phone = item.Phone, Code = item.Error }; messages.Add(error); } } return messages; } catch (Exception ex) { throw new MessageSendingResultException(parameters, ex); } }
/// <summary> /// Sending HLR request for number /// </summary> /// <param name="phone">Phone number</param> /// <returns>Results list</returns> public List<HlrResponse> MakeHlrRequest(Int64[] phone) { var parameters = new NameValueCollection() { {"phone", String.Join(",", phone.Select(p => p.ToString()))} }; try { var content = GetStreamContent("hlr", parameters); var settings = new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true }; var serializer = new DataContractJsonSerializer(typeof(List<HlrResponse>), settings); var items = serializer.ReadObject(content) as List<HlrResponse>; return items; } catch (Exception ex) { throw new HlrResponseException(parameters, ex); } }