Сервис + передача видео

Тема в разделе ".NET - Общие вопросы по языкам", создана пользователем 123456789igor, 17 май 2015.

  1. 123456789igor

    123456789igor Active Member

    Репутация:
    0
    Регистрация:
    12 янв 2011
    Сообщения:
    29
    Симпатии:
    0
    Прошу помощи, совсем не понимаю почему не работает.
    Пытаюсь написать передачу видео с камеры использую 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(context, "ChatEndPoint");
    					channel = factory.CreateChannel();
    					IOnlineStatus status = channel.GetProperty();
    					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);
    			}
    		}
     
Загрузка...

Поделиться этой страницей