using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace RCUHost
{
	public interface IHostServer
	{
        //IList<IReceiver> Receivers { get; }

		/// <summary>
		/// 启动 HostServer
		/// </summary>
		void Start();

		/// <summary>
		///  将命令数据发送到位于指定远程终结点的主机。
		/// </summary>
		/// <param name="data">byte类型数据，表示将要发送到远程主机的命令数据</param>
		/// <param name="endPoint">IPEndPoint类型，表示要将命令数据发送到的主机和端口</param>
		void Send(byte[] data, IPEndPoint endPoint);

		/// <summary>
		/// 将命令数据报发送到指定的远程主机上的指定端口。
		/// </summary>
		/// <param name="data">byte类型数据，表示将要发送到远程主机的命令数据</param>
		/// <param name="ip">远程主机IP地址</param>
		/// <param name="port">远程主机端口</param>
		void Send(byte[] data, string ip, int port);

		/// <summary>
		///  将命令数据发送到位于指定远程终结点的主机。
		/// </summary>
		/// <param name="data">byte类型数据，表示将要发送到远程主机的命令数据</param>
		/// <param name="endPoint">IPEndPoint类型，表示要将命令数据发送到的主机和端口</param>
        void SendAndPushCommandQueue(byte[] data, IPEndPoint endPoint);

		/// <summary>
		/// 将命令数据报发送到指定的远程主机上的指定端口。
		/// </summary>
		/// <param name="data">byte类型数据，表示将要发送到远程主机的命令数据</param>
		/// <param name="ip">远程主机IP地址</param>
		/// <param name="port">远程主机端口</param>
        void SendAndPushCommandQueue(byte[] data, string ip, int port);

		/// <summary>
		/// 关闭 HostServer
		/// </summary>
		void Close();

		/// <summary>
		/// BeforeStart事件
		///		HostServer 启动之前调用
		/// </summary>
		//event EventHandler BeforeStart;

		/// <summary>
		/// AfterStart事件
		///		HostServer 启动之后调用
		/// </summary>
		//event EventHandler AfterStart;

		void AddReceiver(IReceiver receiver);

		void RemoveReceiver(IReceiver receiver);


        /// <summary>
        /// 阿宝
        /// </summary>
        void Start_AirConditionMisson();
	}
}
