Example #1
0
        public static VoipMsResponse SendSMS(SMS sms)
        {
            Tuple<CookieContainer, VoipMsResponse> login = Login ();
            VoipMsResponse res;

            // Login error
            if (login.Item2.page != "sms.html") {
                // Error response from login
                res = login.Item2;
            }
            // We are logued in, now try to send the message !
            else {
                var request = (HttpWebRequest)WebRequest.Create("https://sms.voip.ms/sms_manage.php");
                request.CookieContainer = login.Item1;

                var postData = "contact=" + sms.Target.ToDigitsOnly();
                //var postData = "contact=" + "4182221617";
                postData += "&did=5143123182";
                postData += "&msg=" + sms.Message;
                postData += "&method=send_sms";
                postData += "&type=";
                postData += "&type=0";
                postData += "&sync=1";

                var data = Encoding.ASCII.GetBytes(postData);

                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                request.ContentLength = data.Length;

                using (var stream = request.GetRequestStream())
                {
                    stream.Write(data, 0, data.Length);
                }

                var response = (HttpWebResponse)request.GetResponse();

                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                Console.WriteLine("-------------- SMS RESPONSE STRING --------------" + "\n" + responseString);

                // Convert JSON response to VoipMsResponse
                res = (VoipMsResponse) JsonConvert.DeserializeObject(responseString, typeof(VoipMsResponse));
            }

            return res;
        }
Example #2
0
        public void AddMessage(SMS sms)
        {
            const string Tag = "conversation";

            sms.Time = DateTime.Now.ToString ("yyyyMMddHHmmssffff");

            // Create message's document
            var docMessage = database.CreateDocument();
            var props = new Dictionary<string, object>
            {
                { "conversationId", sms.Target },
                { "type", typeof(SMS).Name.ToLower() },
                { "time", sms.Time },
                { "text", sms.Message },
                { "source", sms.Source }
            };
            docMessage.PutProperties(props);

            // Update conversation
            // TODO : check if message update is OK
            var docConversation = database.GetDocument(sms.Target);
            docConversation.Update((UnsavedRevision newRevision) =>
                {
                    var properties = newRevision.Properties;
                    properties["conversationId"] = sms.Target;
                    properties["type"] = Tag;
                    properties["lastMessage"] =  sms.Message;
                    properties["lastMessageTime"] = DateTime.Now.ToString("yyyyMMddHHmmssffff");
                    properties["source"] = sms.Source;
                    return true;
                });
        }
        // Create document for conversation if not exists
        void initConversation(SMS sms)
        {
            // Try to get document
            var doc = Database.GetExistingDocument (sms.Target);

            // Document does not exists, let's create a new one
            if (doc == null) {
                var properties = new Dictionary<string, object>
                {
                    { "conversationId", sms.Target },
                    { "type", Tag.ToString() },
                    { "lastMessage", null },
                    { "lastMessageTime", null },
                };
                var document = Database.GetDocument(sms.Target);
                var rev = document.PutProperties(properties);
            }
        }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            RequestWindowFeature(WindowFeatures.IndeterminateProgress);

            // Load contact infos
            string normalizedPhone = Intent.GetStringExtra("normalizedPhone");
            string message = Intent.GetStringExtra("message");

            Contact contact = Contact.GetContactByPhone(normalizedPhone, this);

            // Get database instance
            Database = Manager.SharedInstance.GetDatabase(Tag.ToLower());

            var smsManager = new SMSManager (Database);
            var sms = new SMS(normalizedPhone, message);

            // Create conversation document if not exist
            initConversation (sms);

            // If message comes from notification, add it to db
            string source = (string) Intent.GetStringExtra ("source");
            if (source == "server") {
                sms.Source = source;
                smsManager.AddMessage (sms);
            }

            // Get previous messages
            // TODO : Filer messages to get only those from current conversation
            Query = smsManager.GetQuery(sms.Target);
            Query.Completed += (sender, e) =>
                Log.Verbose(Tag, e.ErrorInfo.ToString() ?? e.Rows.ToString());
            LiveQuery = Query.ToLiveQuery();

            SetContentView (Resource.Layout.Conversation);

            // Activate Back button in Action Bar
            ActionBar.SetHomeButtonEnabled(true);
            ActionBar.SetDisplayHomeAsUpEnabled(true);

            // Rethrive layout fields
            TextView newMessageText = FindViewById<TextView> (Resource.Id.txtMessageBox);
            FloatingActionButton sendMessageButton = FindViewById<FloatingActionButton> (Resource.Id.btnSendMessage);
            LinearLayout layout = FindViewById<LinearLayout> (Resource.Id.mainLinearLayout);
            ListView listView = FindViewById<ListView>(Resource.Id.listViewMessages);

            // Set ActionBar to contact name
            this.Title = contact.DisplayName + " " + contact.NormalizedNumber;

            sendMessageButton.Click += (sender, e) => {
                sms.Message = newMessageText.Text;
                sms.Source = "app";
                Background(sms);

                newMessageText.Text = "";
            };

            Database.Changed += (sender, e) => {
                var changes = e.Changes.ToList();
                foreach (DocumentChange change in changes) {
                    Log.Verbose(Tag, "Document " + change.DocumentId + " changed");
                }
            };

            // Bind listview adapyer to liveQuery
            listView.Adapter = new ListLiveQueryAdapter(this, LiveQuery);
        }
        void Background(SMS sms)
        {
            // Starting a new thread to do the workload of sending the sms
            new Thread(new ThreadStart(() =>
                {

                    // Send sms
                    VoipMsResponse response = SMSManager.SendSMS(sms);

                    // An error ocured while sending sms... Show error message
                    /*if (response.error != null) {
                        RunOnUiThread ( () => {
                            //response.error txtMessageStatus.Text;
                        });
                    }*/

                    // Save message to database, add it to the listview
                    RunOnUiThread ( () => {
                        var smsManager = new SMSManager (Database);
                        smsManager.AddMessage(sms);
                    });

                }
            )).Start();
        }