/// <summary> /// オペレーションを受信した /// </summary> /// <param name="PacketID">パケットID</param> /// <param name="Params">パラメータ</param> public void OnRecvOperation(EPacketID PacketID, Dictionary <byte, object> Params) { if (OperationHandlers.ContainsKey(PacketID)) { DictionaryStreamReader Reader = new DictionaryStreamReader(Params); var ResponsePacket = OperationHandlers[PacketID]?.Invoke(Reader); if (ResponsePacket != null) // ResponsePacketがnullならReportとして扱う { DictionaryStreamWriter Writer = new DictionaryStreamWriter(); ResponsePacket.Serialize(Writer); var Response = new OperationResponse((byte)ResponsePacket.PacketID, Writer.Dest); Parent.SendOperationResponse(Response, new SendParameters()); } } }
/// <summary> /// リクエスト送信 /// </summary> /// <param name="SendPacket">送信パケット</param> /// <param name="ResponsePacketID">レスポンスパケットのID</param> /// <param name="ResponseHandler">リクエストに対応するレスポンスのハンドラ</param> public void SendRequest(IPacket SendPacket, EPacketID ResponsePacketID, Action <IDictionaryStream> ResponseHandler) { if (Peer == null) { Debug.LogError("Peer is null."); return; } byte ByteID = (byte)ResponsePacketID; ResponseHandlers.Add(ByteID, ResponseHandler); DictionaryStreamWriter Writer = new DictionaryStreamWriter(); SendPacket.Serialize(Writer); Peer.OpCustom((byte)SendPacket.PacketID, Writer.Dest, false); }
/// <summary> /// オペレーションのハンドラ追加 /// </summary> /// <param name="PacketID">パケットID</param> /// <param name="Handler">ハンドラ</param> protected void AddOperationHandler(EPacketID PacketID, Func <IDictionaryStream, IPacket> Handler) { OperationHandlers.Add(PacketID, Handler); }
/// <summary> /// イベントのハンドラを追加 /// </summary> /// <param name="PacketID">パケットID</param> /// <param name="Handler">ハンドラ</param> public void AddEventHandler(EPacketID PacketID, Action <IDictionaryStream> Handler) { EventDic.Add((byte)PacketID, Handler); }