Messenger/MSGer.tk/ChatForm.cs

219 lines
8.2 KiB
C#
Raw Normal View History

2014-07-12 08:53:00 +00:00
//Hangulatjelek használata
//#define emoticons
using Khendys.Controls;
using System;
2014-04-25 21:55:43 +00:00
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
2014-07-12 08:53:00 +00:00
using System.IO;
2014-04-25 21:55:43 +00:00
using System.Linq;
2014-07-12 08:53:00 +00:00
using System.Net;
using System.Net.Sockets;
2014-04-25 21:55:43 +00:00
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
2014-07-12 08:53:00 +00:00
using HdSystemLibrary.IO;
2014-04-25 21:55:43 +00:00
namespace MSGer.tk
{
public partial class ChatForm : Form
{
public static List<ChatForm> ChatWindows = new List<ChatForm>();
public List<int> ChatPartners = new List<int>();
public ChatForm()
{
InitializeComponent();
//Amint létrehozom, ez a kód lefut - Nem számit, hogy megjelenik-e
this.Text = Language.Translate("chat_title");
showicons.Text = Language.Translate("chat_showicons");
2014-04-25 21:55:43 +00:00
}
private void ChatForm_Load(object sender, EventArgs e)
{
if (ChatPartners.Count == 0)
MessageBox.Show(Language.Translate("error") + ": " + Language.Translate("chat_nowindow"));
2014-04-25 21:55:43 +00:00
if (ChatPartners.Count == 1)
{
partnerName.Text = UserInfo.Select(ChatPartners[0]).Name;
2014-07-12 08:53:00 +00:00
TextFormat.Parse(partnerName);
partnerMsg.Text = UserInfo.Select(ChatPartners[0]).Message;
2014-07-12 08:53:00 +00:00
TextFormat.Parse(partnerMsg);
switch (UserInfo.Select(ChatPartners[0]).State)
2014-04-25 21:55:43 +00:00
{
case 0:
2014-04-25 21:55:43 +00:00
{
statusLabel.Text = Language.Translate("offline");
2014-04-25 21:55:43 +00:00
break;
}
case 1:
2014-04-25 21:55:43 +00:00
{
statusLabel.Text = Language.Translate("menu_file_status_online");
2014-04-25 21:55:43 +00:00
break;
}
case 2:
2014-04-25 21:55:43 +00:00
{
statusLabel.Text = Language.Translate("menu_file_status_busy");
2014-04-25 21:55:43 +00:00
break;
}
case 3:
2014-04-25 21:55:43 +00:00
{
statusLabel.Text = Language.Translate("menu_file_status_away");
break;
}
default:
{
statusLabel.Text = Language.Translate("networking_alone");
2014-04-25 21:55:43 +00:00
break;
}
}
}
}
2014-07-12 08:53:00 +00:00
public bool InternalMessageChange = false;
public int SelectionStart = 0;
public int SelectionLength = 0;
public int TextLength = 0;
2014-04-25 21:55:43 +00:00
private void SendMessage(object sender, KeyEventArgs e)
{
2014-07-12 08:53:00 +00:00
//SendMessage
if (e.KeyCode != Keys.Enter || e.Shift || messageTextBox.Text.Length == 0)
2014-04-25 21:55:43 +00:00
return;
messageTextBox.ReadOnly = true;
if (!Networking.SendChatMessage(this, messageTextBox.Text))
MessageBox.Show(Language.Translate("networking_alone"));
2014-04-25 21:55:43 +00:00
messageTextBox.Focus();
messageTextBox.Text = "";
messageTextBox.ReadOnly = false;
}
private void MessageTextChanged(object sender, EventArgs e)
{
2014-07-12 08:53:00 +00:00
if (!InternalMessageChange)
{
if (messageTextBox.Text == "\n")
messageTextBox.Text = "";
#if emoticons
2014-07-12 08:53:00 +00:00
TextFormat.Parse((ExExRichTextBox)sender);
#endif
2014-07-12 08:53:00 +00:00
}
2014-04-25 21:55:43 +00:00
}
private void OpenLink(object sender, LinkClickedEventArgs e)
{
Process.Start(e.LinkText);
}
private void ChatForm_FormClosing(object sender, FormClosingEventArgs e)
{
ChatWindows.Remove(this);
}
public static ChatForm GetChatFormByUsers(IEnumerable<int> users) //2014.08.08. - IEnumerable: 2014.08.16.
{
int i;
for (i = 0; i < ChatWindows.Count; i++)
{
if (ChatWindows[i].ChatPartners.HasSameElementsAs(users))
break;
}
return (i != ChatWindows.Count) ? ChatWindows[i] : null; //== --> !=: 2014.09.22.
}
public string TMessage;
2014-04-25 21:55:43 +00:00
public int SetThreadValues()
{
recentMsgTextBox.AppendText(TMessage);
2014-07-12 08:53:00 +00:00
TextFormat.Parse(recentMsgTextBox);
2014-04-25 21:55:43 +00:00
TMessage = "";
recentMsgTextBox.SelectionStart = recentMsgTextBox.TextLength; //2014.04.10.
recentMsgTextBox.ScrollToCaret(); //2014.04.10.
return 0;
}
2014-07-12 08:53:00 +00:00
public void OpenSendFile(SelectPartnerForm spform)
{
//A küldő a szerver - 2014.06.15.
//Fogadás: //sendfile üzenet
if (openFileDialog1.ShowDialog() == DialogResult.Cancel)
return;
Stream st = new FileStream(openFileDialog1.FileName, FileMode.Open);
try
{
if (new FileInfo(openFileDialog1.FileName).Length > Int64.Parse(Storage.Settings["filelen"]))
2014-07-12 08:53:00 +00:00
{
List<byte> buf = new List<byte>();
int b;
do
{
b = st.ReadByte();
buf.Add((byte)b);
}
while (b != -1);
st = new MemoryStream(buf.ToArray(), false);
}
}
catch (OutOfMemoryException)
2014-07-12 08:53:00 +00:00
{ //A MemoryStream-et nem hozza létre, ezzel elméletileg memóriát felszabadítva
st.Seek(0, SeekOrigin.Begin);
}
IPHostEntry host;
IPAddress localIP = IPAddress.Parse("127.0.0.1");
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localIP = ip;
break;
}
}
//string ret = Networking.SendRequest("setip", spform.Partners[0] + 'ͦ' + localIP.ToString() + ":" + Settings.Default.port + ":" + openFileDialog1.FileName, 0, true);
//var ipAddr = IPAddress.Parse(ret);
IPAddress ipAddr = null; //Használja fel a partner ismert IP-címét
2014-07-12 08:53:00 +00:00
Socket sListener;
SocketPermission permission;
permission = new SocketPermission(NetworkAccess.Accept, TransportType.Tcp, "", SocketPermission.AllPorts);
sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
var ipEndPoint = new IPEndPoint(ipAddr, Int32.Parse(Storage.Settings["port"]));
2014-07-12 08:53:00 +00:00
sListener.Listen(1);
ST = st; //Átadja az adatfolyamot a nyilvánosabb változónak
AsyncCallback aCallback = new AsyncCallback(SendFile_AcceptCallback);
sListener.BeginAccept(aCallback, sListener);
}
private Stream ST;
private void SendFile_AcceptCallback(IAsyncResult ar)
{
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);
var ns = new NetworkStream(handler);
ns.CopyFrom(ST, new CopyFromArguments(new ProgressChange(SendFile_ProgressChange)));
}
private void SendFile_ProgressChange(long bytesRead, long totalBytesToRead)
{
Console.WriteLine("SendFile: " + bytesRead + " / " + totalBytesToRead);
}
public string CurrentMessage = "";
private void showicons_CheckedChanged(object sender, EventArgs e)
{
if (showicons.Checked)
{
CurrentMessage = messageTextBox.Text;
messageTextBox.Enabled = false;
TextFormat.Parse(messageTextBox);
}
else
{
messageTextBox.Text = CurrentMessage;
messageTextBox.Enabled = true;
}
}
2014-04-25 21:55:43 +00:00
}
}