private void toolStripButton2_Click(object sender, EventArgs e) { text = textbox[(uint)(myTabControl1.SelectedTab.Tag)].Text; textbox[(uint)(myTabControl1.SelectedTab.Tag)].Text = ""; if (!string.IsNullOrEmpty(text.Trim())) // Если textBox не пустой, то печатаем сообщение в richTextBox, а затем отправляем { richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionStart = richtbox[Convert.ToUInt32(myTabControl1.SelectedTab.Tag)].Text.Length; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionLength = 0; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionFont = new Font(FontFamily.GenericSerif, 8, FontStyle.Bold); richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionColor = Color.FromArgb(0, 0, 255); richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectedText = "Я (" + DateTime.Now.ToShortTimeString() + " " + DateTime.Now.ToShortDateString() + ")"; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionStart = richtbox[(uint)(myTabControl1.SelectedTab.Tag)].Text.Length; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionLength = 0; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionFont = new Font(FontFamily.GenericSerif, 9, FontStyle.Regular); richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionColor = Color.Black; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectedText = "\r\n" + text + "\r\n"; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionStart = richtbox[(uint)(myTabControl1.SelectedTab.Tag)].Text.Length; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionLength = 0; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectionFont = new Font(FontFamily.GenericSerif, 4, FontStyle.Regular); richtbox[(uint)(myTabControl1.SelectedTab.Tag)].SelectedText = "\r\n"; richtbox[(uint)(myTabControl1.SelectedTab.Tag)].ScrollToCaret(); if (vars.VARS.Out_message_on && vars.VARS.Sound) GeneralMethods.NotifySound("OutMessage"); } vk start = new vk(); SendMessage SendMsg = new SendMessage(start.sendMsg); IAsyncResult res1 = SendMsg.BeginInvoke(text, (uint)myTabControl1.SelectedTab.Tag, null, null); res1.AsyncWaitHandle.WaitOne(); bool success = SendMsg.EndInvoke(res1); if (!success) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "Ошибка при отправке!\nПовторите ещё раз!", (uint)0); } }
/// <summary> /// Получение истории /// </summary> /// <param name="uid">ID пользователя</param> /// <param name="offset">Смещение для выборки сообщений</param> protected internal void getHistory(uint uid, int offset) { this.uid = uid; vk start = new vk(); string s, text, // Текст сообщения name; uint mid, // Номер сообщения outId, readstate; // ID отправителя double date; // Дата Hashtable jsonResp = new Hashtable(), data; s = start.getHistory(uid, 40, offset); if (s != "" && s.IndexOf("error") == -1) { StringBuilder sb = new StringBuilder(); // Объявляем "собиралку" строки sb.Append("<html><head>" + "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script>" + "</head><body><table style='font-size: 12px'><tr><td bgcolor=#E1E7ED><center><a href='#more' font-size=12px>Загрузить ещё</a></center></td></tr>"); jsonResp = (Hashtable)JSON.JsonDecode(s); ArrayList msg = (ArrayList)jsonResp["response"]; int min = msg.Count >= 40 ? 40 : msg.Count - 1; // По умолчанию загружаем по 40 фотографий, если их меньше, то загружаем сколько есть for (int i = min; i > 0; i--) { data = (Hashtable)msg[i]; text = Convert.ToString(data["body"]); mid = Convert.ToUInt32(data["mid"]); outId = Convert.ToUInt32(data["from_id"]); date = Convert.ToDouble(data["date"]); readstate = Convert.ToUInt32(data["read_state"]); if (outId == vars.VARS.Mid) name = "Я"; else name = vars.VARS.Contact[outId].UserName; sb.Append("<tr><td bgcolor="); if (readstate != 1) // Выделение непрочитанных сообщений sb.Append("#E1E7ED name="); else sb.Append("#FFFFFF name="); sb.Append(mid + ">"); sb.Append("<font color="); if (outId == vars.VARS.Mid) // Выбор цвета имени sb.Append("'0000FF'>"); else sb.Append("'FA1C21'>"); sb.Append(name); sb.Append(" ("); sb.Append(ChatForm.ConvertFromUnixTimestamp(date).ToShortTimeString()); sb.Append(" "); sb.Append(ChatForm.ConvertFromUnixTimestamp(date).ToShortDateString()); sb.Append(")"); sb.Append("</font><br>"); sb.Append(text); sb.Append("<br></td></tr>"); } temp = webBrowser1.DocumentText.Replace("<html><head>" + "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script>" + "</head><body><table style='font-size: 12px'><tr><td bgcolor=#E1E7ED><center><a href='#more' font-size=12px>Загрузить ещё</a></center></td></tr>", ""); // Удаляем фрагмент заголовка temp = temp.Replace("</table></body></html>", ""); // Удаляем фрагмент подвала sb.Append(temp); // Пристыковываем предыдущие сообщение к новым sb.Append("</table></body></html>"); // Добавляем подвал webBrowser1.DocumentText = sb.ToString(); // Загружаем в веббраузер } else { MessageBox.Show("Не удалось получить историю! Попробуйте позднее!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } }
private void button1_Click(object sender, EventArgs e) { vk start = new vk(); if (checkBox1.Checked) // если флажон для статуса { SetStatus setStatus = new SetStatus(start.setStatus); IAsyncResult res1 = setStatus.BeginInvoke(richTextBox1.Text, null, null); res1.AsyncWaitHandle.WaitOne(2000); if (setStatus.EndInvoke(res1).IndexOf("error") != -1) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } //start.setStatus(richTextBox1.Text); } else // если для записи на стене { string name = ""; if (checkBox2.Checked) // если нужно изображение, загружаем { OpenFileDialog open = new OpenFileDialog(); open.FileName = ""; open.Filter = "Изображения|*.jpg;*.gif;*.png"; if (open.ShowDialog() == DialogResult.OK) { UploadFile upload = new UploadFile(start.UploadFile); IAsyncResult res11 = upload.BeginInvoke(ID, open.FileName, null, null); int iter = 0; while (!res11.IsCompleted) { iter++; if (iter == 500) { iter = 0; Application.DoEvents(); } } res11.AsyncWaitHandle.WaitOne(); name = upload.EndInvoke(res11); } if (name == "") { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } } if (ID != 0) // не себе { if (name != "") { SetWallStatus setWallStatus = new SetWallStatus(start.SetWallStatus); IAsyncResult res1 = setWallStatus.BeginInvoke(richTextBox1.Text, name, ID, null, null); res1.AsyncWaitHandle.WaitOne(2000); if (setWallStatus.EndInvoke(res1).IndexOf("error") != -1) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } //start.SetWallStatus(richTextBox1.Text, name, ID); } else { SetWallStatus setWallStatus = new SetWallStatus(start.SetWallStatus); IAsyncResult res1 = setWallStatus.BeginInvoke(richTextBox1.Text, "", ID, null, null); res1.AsyncWaitHandle.WaitOne(2000); if (setWallStatus.EndInvoke(res1).IndexOf("error") != -1) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } //start.SetWallStatus(richTextBox1.Text, "", ID); } } else // себе { if (name != "") { SetWallStatus setWallStatus = new SetWallStatus(start.SetWallStatus); IAsyncResult res1 = setWallStatus.BeginInvoke(richTextBox1.Text, name, ID, null, null); res1.AsyncWaitHandle.WaitOne(2000); if (setWallStatus.EndInvoke(res1).IndexOf("error") != -1) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } //start.SetWallStatus(richTextBox1.Text, name, ID); } else { SetStatus setWallStatus = new SetStatus(start.SetWallStatus); IAsyncResult res1 = setWallStatus.BeginInvoke(richTextBox1.Text, null, null); res1.AsyncWaitHandle.WaitOne(2000); if (setWallStatus.EndInvoke(res1).IndexOf("error") != -1) { NotifyEvent ShowNotify = new NotifyEvent(ShowNotifyWindow); this.Invoke(ShowNotify, "Ошибка!", "При публикации\nвозникли проблемы!", (uint)0); } //start.SetWallStatus(richTextBox1.Text); } } } this.Close(); }
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { try { chat.Text = myTabControl1.SelectedTab.Text; vk start = new vk(); start.markAsRead(Convert.ToUInt32(myTabControl1.SelectedTab.Tag)); textbox[(uint)(myTabControl1.SelectedTab.Tag)].Select(); } // При смене вкладки меняем текст заголовка окна catch { } }
protected override void OnMouseDoubleClick(MouseEventArgs e) { this.Focus(); vk start = new vk(); vk.profile temp = new vk.profile(); try { temp = vars.VARS.Contact[Items[(vscroll.Value) + (int)(e.Y / HEIGHT_ITEM)]]; // если контакт на этом месте существует, то его данные записываются в переменную } catch (ArgumentOutOfRangeException exe) { //GeneralMethods.WriteError(exe.Source, exe.Message, exe.TargetSite); return; } if (!(temp.online || vars.VARS.ShowOffline)) // когда оффлайн скрыты предотвращаем случайные нажатия return; if (!vars.VARS.Chat.richtbox.ContainsKey(temp.uid)) // если чат с пользователем ещё не открыт { vars.VARS.Chat.WindowState = FormWindowState.Normal; vars.VARS.Chat.chatIn(temp.uid, temp.UserName, true); } GetHistory newEvent = new GetHistory(start.getHistory); IAsyncResult res2 = newEvent.BeginInvoke(temp.uid, 5, null, null); // в асинхронном потоке получаем историю сообщений, чтобы чат открывался сразу //start.getHistory(temp.uid, 5); // заправшиваем историю if (vars.VARS.Chat.Visible == false) // если невидим, делаем видимым { vars.VARS.Chat.Show(); vars.VARS.Chat.Text = temp.UserName; } //vars.VARS.Chat.Activate(); if (vars.VARS.Frequency) // если настройка включена обновляем данные частоты { if (vars.VARS.FrequencyUse.ContainsKey(temp.uid)) { uint j = vars.VARS.FrequencyUse[temp.uid]; j++; vars.VARS.FrequencyUse.Remove(temp.uid); vars.VARS.FrequencyUse.Add(temp.uid, j); } } base.OnMouseDoubleClick(e); }
void timer_Tick_About(object sender, EventArgs e) { time += 500; if (time == TIME_TOOLTIP) // когда прошло нужное количество времени, запрашиваем данные о пользователе { tip.Hide(this); vk start = new vk(); GetPhoto getPhoto = new GetPhoto(start.getPhoto); IAsyncResult res1 = getPhoto.BeginInvoke(uid, "medium", null, null); while (!res1.IsCompleted) Application.DoEvents(); res1.AsyncWaitHandle.WaitOne(); photo = getPhoto.EndInvoke(res1); // photo = start.getPhoto(uid, "medium"); if (photo == null) { if (File.Exists(vars.VARS.Directory + "\\medium\\" + uid.ToString())) try { photo = Image.FromFile(vars.VARS.Directory + "\\medium\\" + uid.ToString()); } catch (OutOfMemoryException exe) { GeneralMethods.WriteError(exe.Source, exe.Message, exe.TargetSite); } else { timer.Stop(); time = 0; return; } } GetInfo getInfo = new GetInfo(start.getInfo); IAsyncResult res2 = getInfo.BeginInvoke(uid, null, null); while (!res2.IsCompleted) Application.DoEvents(); res1.AsyncWaitHandle.WaitOne(); System.Collections.Hashtable Info = getInfo.EndInvoke(res2); //System.Collections.Hashtable Info = start.getInfo(uid); if (Info != null && !Info.ContainsKey("error")) { System.Collections.ArrayList Data = (System.Collections.ArrayList)Info["response"]; name = Convert.ToString(((System.Collections.Hashtable)Data[0])["first_name"]) + " " + Convert.ToString(((System.Collections.Hashtable)Data[0])["last_name"]); string bdate = Convert.ToString(((System.Collections.Hashtable)Data[0])["bdate"]); phone = Convert.ToString(((System.Collections.Hashtable)Data[0])["mobile_phone"]); string month = ""; if (bdate != "") { string[] bday = bdate.Split('.'); switch (bday[1]) // месяц текстом чтобы был { case "1": month = "января"; break; case "2": month = "февраля"; break; case "3": month = "марта"; break; case "4": month = "апреля"; break; case "5": month = "мая"; break; case "6": month = "июня"; break; case "7": month = "июля"; break; case "8": month = "августа"; break; case "9": month = "сентября"; break; case "10": month = "октября"; break; case "11": month = "ноября"; break; case "12": month = "декабря"; break; } birthday = bday[0] + " " + month + " " + (bday.Length == 2 ? "" : bday[2]); // формируем строку дня рождения } tip.Size = new Size(220, (photo == null) ? 200 : (photo.Height + 40)); // задаём размер подсказки tip.Show(uid.ToString(), this, this.ClientRectangle.X + this.Width, this.PointToClient(Control.MousePosition).Y); // показываем подсказку } timer.Stop(); time = 0; } //throw new NotImplementedException(); }
protected override void OnKeyUp(KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { vk start = new vk(); if (!vars.VARS.Chat.richtbox.ContainsKey(selectedItem.uid)) // если чат с пользователем ещё не открыт { vars.VARS.Chat.WindowState = FormWindowState.Normal; vars.VARS.Chat.chatIn(selectedItem.uid, selectedItem.UserName, true); } GetHistory newEvent = new GetHistory(start.getHistory); IAsyncResult res2 = newEvent.BeginInvoke(selectedItem.uid, 5, null, null); // в асинхронном потоке получаем историю сообщений, чтобы чат открывался сразу //start.getHistory(temp.uid, 5); // заправшиваем историю if (vars.VARS.Chat.Visible == false) // если невидим, делаем видимым { vars.VARS.Chat.Show(); vars.VARS.Chat.Text = selectedItem.UserName; } //vars.VARS.Chat.Activate(); if (vars.VARS.Frequency) // если настройка включена обновляем данные частоты { if (vars.VARS.FrequencyUse.ContainsKey(selectedItem.uid)) { uint j = vars.VARS.FrequencyUse[selectedItem.uid]; j++; vars.VARS.FrequencyUse.Remove(selectedItem.uid); vars.VARS.FrequencyUse.Add(selectedItem.uid, j); } } e.SuppressKeyPress = true; } base.OnKeyUp(e); }
private void button2_Click(object sender, EventArgs e) { try { // обновляем маленькие фотографии в списке контактов если кажется, что они устарели, например) vk start = new vk(); List<uint> a = new List<uint>(); foreach (KeyValuePair<uint, vk.profile> item in vars.VARS.Contact) // для кого грузим новые фотки (в данном случае для всех) a.Add(item.Key); getPhoto newPhoto = new getPhoto(start.getPhoto); IAsyncResult res2 = newPhoto.BeginInvoke(a, "photo", null, null); // пускаем в асинхронном потоке } catch (Exception exe) { MessageBox.Show("Неизвестная ошибка!", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Warning); GeneralMethods.WriteError(exe.Source, exe.Message, exe.TargetSite); } }
void Processing(uint msgId, uint flag, uint outId, double date, string subj, string text, vk start) { if ((flag & 2) != 2) // Если не содержит флаг 2 (исходящее) { string name = null; if ((flag & 32) == 32) // Выбираем какое имя (Если 32, то друг, значит должен быть в списке) name = vars.VARS.Contact[outId].UserName; else name = outId.ToString(); if (vars.VARS.Chat.richtbox.ContainsKey(outId)) // Если содержит, значит вкладка была открыта, значит печатаем { GeneralMethods.printMsg(outId, text, name, date); start.markAsReadMsg(msgId); } else { bool flag1; if (vars.VARS.Chat.WindowState == FormWindowState.Minimized) { flag1 = true; vars.VARS.Chat.WindowState = FormWindowState.Normal; } else flag1 = false; vars.VARS.Chat.chatIn(outId, name, flag1); // Создаём новую вкладку if (!vars.VARS.Chat.Visible) // Если невидимый чат - делаем видимым { vars.VARS.Chat.Show(); vars.VARS.Chat.Activate(); start.markAsReadMsg(msgId); } else // Или просто активируем vars.VARS.Chat.Activate(); GeneralMethods.printMsg(outId, text, name, date); // Печатаем сообщение } if ((flag & 3) != 3) // Если не "исходящее непрочитанное" { if (vars.VARS.NumbMass.ContainsKey(outId)) // Если содержит ключ, добавляем новый айди сообщения vars.VARS.NumbMass[outId].Add(msgId); else // Иначе новый ключ и добавляем айди { vars.VARS.NumbMass.Add(outId, new List<uint>()); vars.VARS.NumbMass[outId].Add(msgId); } } if (vars.VARS.Incoming_message_on && vars.VARS.Sound) // Если разрешено играть музыку, играем в другом потоку { GeneralMethods.NotifySound("IncomeMessage"); } if (vars.VARS.Frequency) { if (vars.VARS.FrequencyUse.ContainsKey(outId)) { uint j = vars.VARS.FrequencyUse[outId]; j++; vars.VARS.FrequencyUse.Remove(outId); vars.VARS.FrequencyUse.Add(outId, j); } } } else if ((flag & 16) != 16) { if (vars.VARS.Chat.richtbox.ContainsKey(outId)) GeneralMethods.printMsg(outId, text, vars.VARS.Mid.ToString(), date); } }
/// <summary> /// Метод, обрабатывающий получение сообщения /// </summary> /// <param name="msgId">ID сообщения</param> /// <param name="flag">Флаг сообщения (суммирование определённых флажков)</param> /// <param name="outId">ID отправителя</param> /// <param name="date">Дата в UNIX формате</param> /// <param name="subj">Тема сообщения</param> /// <param name="text">Текст сообщения</param> void server_NewMessage(IncomingMessageArgs info) { uint msgId = info.MessageID; uint flag = info.flag; uint outId = info.outID; double date = info.date; string subj = info.subj; string text = info.text; vk start = new vk(); AccessChat NewAccess = new AccessChat(Processing); vars.VARS.Chat.Invoke(NewAccess, msgId, flag, outId, date, subj, text, start); }
protected override void OnMouseClick(MouseEventArgs e) { if (e.Button == MouseButtons.Right) this.Close(); if (e.Button == MouseButtons.Left) { if (this.id != 0) { vk start = new vk(); if (!vars.VARS.Chat.richtbox.ContainsKey(this.id)) { vars.VARS.Chat.WindowState = FormWindowState.Normal; vars.VARS.Chat.chatIn(this.id, this.name, true); } start.getHistory(this.id, 5); if (vars.VARS.Chat.Visible == false) { vars.VARS.Chat.Show(); vars.VARS.Chat.Text = this.name; } } else this.Close(); } base.OnMouseClick(e); }