Прошу помощи, совсем не понимаю почему не работает.
Пытаюсь написать передачу видео с камеры использую wcf. Ситуация такая. Видео шлется только с 1го компьютера другому, причет компьютер, тут как реальная физическая сущность.
Пример:
Есть компьютер 1 и компьтер 2. На 1ом компьютере запустил сервис. Скопировал клиентскую часть на 2 машины, т.е исполняемые экземпляры полностью идентичны. И видео шлется только с 1го компьютера на 2ой. Наоборот вообще не работает. Я думал, что может это как-то связано с тем, где запусщен сервис, но нет. Если сервис запустить на машине 2, то все равно видео будет слаться с 1го на 2го. Наоборот работать не будет. Прошу помочь разобраться, что не так. Совершенно не понимаю, что происходит.
Линка на проект, гитхаб: https://github.com/jacky22/Chat
| Код |
[ServiceContract(CallbackContract = typeof(IChatService))] public interface IChatService { [OperationContract(IsOneWay = true)] void Join(string memberName); [OperationContract(IsOneWay = true)] void Leave(string memberName); [OperationContract(IsOneWay = true)] void SendMessage(string memberName, string message); [OperationContract(IsOneWay = true)] void Call(string memberName, byte[] message); }
public interface IChatChannel : IChatService, IClientChannel { } public partial class ChatClient : Form, IChatService { private delegate void UserJoined(string name); private delegate void UserSendMessage(string name, string message); private delegate void UserCall(string name, byte[] message); private delegate void UserLeft(string name);
private static event UserJoined NewJoin; private static event UserSendMessage MessageSent; private static event UserCall userCall; private static event UserLeft RemoveUser;private void btnLogin_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtUserName.Text.Trim())) { try { NewJoin += new UserJoined(ChatClient_NewJoin); MessageSent += new UserSendMessage(ChatClient_MessageSent); RemoveUser += new UserLeft(ChatClient_RemoveUser); userCall += new UserCall(ChatClient_Call); channel = null; this.userName = txtUserName.Text.Trim(); InstanceContext context = new InstanceContext( new ChatClient(txtUserName.Text.Trim())); factory = new DuplexChannelFactory<IChatChannel>(context, "ChatEndPoint"); channel = factory.CreateChannel(); IOnlineStatus status = channel.GetProperty<IOnlineStatus>(); status.Offline += new EventHandler(Offline); status.Online += new EventHandler(Online); channel.Open(); channel.Join(this.userName); grpMessageWindow.Enabled = true; grpUserList.Enabled = true; grpUserCredentials.Enabled = false; this.AcceptButton = btnSend; rtbMessages.AppendText("*****************************WEL-COME to Chat Application*****************************\r\n"); txtSendMessage.Select(); txtSendMessage.Focus(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } } void ChatClient_Call(string name, byte[] message) { try { if (name == "1") { EncodingImage enc = new EncodingImage(); var result = enc.EncodingImageForRecievedBuffer(message); pictureBox1.Image = result; } else { EncodingImage enc = new EncodingImage(); var result = enc.EncodingImageForRecievedBuffer(message); pictureBox2.Image = result; } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.ToString()); } }public void Call(string memberName, byte[] message) { if (MessageSent != null) { userCall(memberName, message); } }private void button1_Click(object sender, EventArgs e) { isStop = false; Thread t1 = new Thread(start); t1.Start(); } private void start() { while (!isStop) { Thread.Sleep(100); CodingImage image = new CodingImage(); byte[] bytes = image.CodingImages(video); channel.Call(this.userName, bytes); } }
|
|