/*-----------------------------------------------
 *本文件由代码生成器自动生成,
 *千万不要修改本文件的任何代码,
 *修改的的任何代码都会被覆盖掉!
 --------------------------------------------------*/

using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Pomelo.DotNetClient;

namespace pomelo.area
{
	public class TradeHandler
	{
		private PomeloClient _socket;

		public InviteResponse lastInviteResponse { get { return _socket.GetLastResponse<InviteResponse>(); } }
		public AddItemResponse lastAddItemResponse { get { return _socket.GetLastResponse<AddItemResponse>(); } }
		public RemoveItemResponse lastRemoveItemResponse { get { return _socket.GetLastResponse<RemoveItemResponse>(); } }
		public TradeOperateResponse lastTradeOperateResponse { get { return _socket.GetLastResponse<TradeOperateResponse>(); } }
		static TradeHandler()
		{
			EventTypes.RegistPushType("area.tradePush.tradeBeginPush", typeof(TradeBeginPush));
			EventTypes.RegistPushType("area.tradePush.tradeItemChangePush", typeof(TradeItemChangePush));
			EventTypes.RegistPushType("area.tradePush.tradeOperatePush", typeof(TradeOperatePush));
			EventTypes.RegistRequestType("area.tradeHandler.inviteRequest", typeof(InviteRequest), typeof(InviteResponse));
			EventTypes.RegistRequestType("area.tradeHandler.addItemRequest", typeof(AddItemRequest), typeof(AddItemResponse));
			EventTypes.RegistRequestType("area.tradeHandler.removeItemRequest", typeof(RemoveItemRequest), typeof(RemoveItemResponse));
			EventTypes.RegistRequestType("area.tradeHandler.tradeOperateRequest", typeof(TradeOperateRequest), typeof(TradeOperateResponse));
		}
		public TradeHandler(PomeloClient socket)
		{
			this._socket = socket;

		}
		public void inviteRequest(string c2s_playerId,Action<PomeloException,InviteResponse> cb,object option = null)
		{
			var request = new InviteRequest();
			request.c2s_playerId= c2s_playerId;
			_socket.request<InviteResponse>(request, (object msg, out int s2c_code, out string s2c_msg) => {
				var rsp = msg as InviteResponse;
				s2c_code = rsp.s2c_code;
				s2c_msg = rsp.s2c_msg;
				return s2c_code == 200;
			}, cb, option);

		}
		public void addItemRequest(int c2s_diamond,List<pomelo.area.TradeItem> c2s_items,Action<PomeloException,AddItemResponse> cb,object option = null)
		{
			var request = new AddItemRequest();
			request.c2s_diamond= c2s_diamond;
			request.c2s_items.AddRange(c2s_items);
			_socket.request<AddItemResponse>(request, (object msg, out int s2c_code, out string s2c_msg) => {
				var rsp = msg as AddItemResponse;
				s2c_code = rsp.s2c_code;
				s2c_msg = rsp.s2c_msg;
				return s2c_code == 200;
			}, cb, option);

		}
		public void removeItemRequest(List<int> c2s_indexs,Action<PomeloException,RemoveItemResponse> cb,object option = null)
		{
			var request = new RemoveItemRequest();
			request.c2s_indexs.AddRange(c2s_indexs);
			_socket.request<RemoveItemResponse>(request, (object msg, out int s2c_code, out string s2c_msg) => {
				var rsp = msg as RemoveItemResponse;
				s2c_code = rsp.s2c_code;
				s2c_msg = rsp.s2c_msg;
				return s2c_code == 200;
			}, cb, option);

		}
		public void tradeOperateRequest(int c2s_operate,int c2s_diamond,List<pomelo.area.TradeItem> c2s_items,Action<PomeloException,TradeOperateResponse> cb,object option = null)
		{
			var request = new TradeOperateRequest();
			request.c2s_operate= c2s_operate;
			request.c2s_diamond= c2s_diamond;
			request.c2s_items.AddRange(c2s_items);
			_socket.request<TradeOperateResponse>(request, (object msg, out int s2c_code, out string s2c_msg) => {
				var rsp = msg as TradeOperateResponse;
				s2c_code = rsp.s2c_code;
				s2c_msg = rsp.s2c_msg;
				return s2c_code == 200;
			}, cb, option);

		}
		public void onTradeBeginPush(Action<TradeBeginPush> cb)
		{
			_socket.listen_once<TradeBeginPush>(cb);
		}
		public void onTradeItemChangePush(Action<TradeItemChangePush> cb)
		{
			_socket.listen_once<TradeItemChangePush>(cb);
		}
		public void onTradeOperatePush(Action<TradeOperatePush> cb)
		{
			_socket.listen_once<TradeOperatePush>(cb);
		}

	}


}