备份CatanBuilding瘦身独立工程
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using com.fpnn.proto;
|
||||
|
||||
namespace com.fpnn
|
||||
{
|
||||
public delegate void AnswerDelegate(Answer answer, int errorCode);
|
||||
|
||||
public interface IAnswerCallback
|
||||
{
|
||||
void OnAnswer(Answer answer);
|
||||
void OnException(Answer answer, int errorCode);
|
||||
}
|
||||
|
||||
internal class AnswerDelegateCallback: IAnswerCallback
|
||||
{
|
||||
private AnswerDelegate callback;
|
||||
|
||||
public AnswerDelegateCallback(AnswerDelegate answerDelegate)
|
||||
{
|
||||
callback = answerDelegate;
|
||||
}
|
||||
|
||||
public void OnAnswer(Answer answer)
|
||||
{
|
||||
callback(answer, answer.IsException() ? answer.ErrorCode() : ErrorCode.FPNN_EC_OK);
|
||||
}
|
||||
public void OnException(Answer answer, int errorCode)
|
||||
{
|
||||
callback(answer, errorCode);
|
||||
}
|
||||
}
|
||||
|
||||
internal class SyncAnswerCallback: IAnswerCallback
|
||||
{
|
||||
private ManualResetEvent syncEvent;
|
||||
private Answer answer;
|
||||
private UInt32 seqNum;
|
||||
|
||||
public SyncAnswerCallback(Quest quest)
|
||||
{
|
||||
syncEvent = new ManualResetEvent(false);
|
||||
seqNum = quest.SeqNum();
|
||||
}
|
||||
|
||||
public Answer GetAnswer()
|
||||
{
|
||||
syncEvent.WaitOne();
|
||||
syncEvent.Close();
|
||||
return answer;
|
||||
}
|
||||
|
||||
public void OnAnswer(Answer answer)
|
||||
{
|
||||
this.answer = answer;
|
||||
syncEvent.Set();
|
||||
}
|
||||
public void OnException(Answer answer, int errorCode)
|
||||
{
|
||||
if (answer != null)
|
||||
this.answer = answer;
|
||||
else
|
||||
{
|
||||
this.answer = new Answer(seqNum);
|
||||
this.answer.FillErrorCode(errorCode);
|
||||
}
|
||||
|
||||
syncEvent.Set();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user