遊戲內訊息處理

2021-07-10 03:11:17 字數 2806 閱讀 6491

傳送訊息有4種渠道

1. io

2. bus

3. stage

4. public

前面已經講過了關於easymanager的初始化。

public

class

easymanager

implements

private string scanpackage;

private mapresolvers = new hashmap<>();

public

void

init()

}} catch (exception e)

}} catch (classnotfoundexception e) }}

//執行的

public

void

execute(string command, message message)

}public easyresolver getresolver(string command)

public listgetcmdlist()

@override

public

void}}

## 先來講解下stage的訊息處理 ##

## balancebusines***ector的呼叫流程圖##

下面來重點看下balancebusines***ector

在使用分組執行器之前,會先建立乙個routeinfo(group,info) group只要為了尋找到分組執行器,而info主要是為了尋找到executor。

根據配置建立幾組分組執行器

mapgroups = new hashmap<>();

public

balancebusines***ector(long time, mapgroupconfigmap)

} public

void

execute(irunnable runnable, routeinfo routeinfo)

loadingcacheroutecachemap ;

executor executors;

public

executorpoolgroup(int size) );

}public

void

execute(string info, irunnable runnable)

private

final imsgqueuequeue;

private

executor(final string name)

public

void

execute(irunnable command)

總結: 初始化時: 先建立幾組分組執行器,在執行器中,再建立幾個執行器呼叫時:eg:傳送到場景中,先根據key(stage)來找出分組執行器。再根據stageid來從快取中找出相應的executor,然後將irunnable放入到佇列中. 這個就叫做負載均衡使用這個可以比較平均的找到每個executor。

private

final blockingqueuequeue = new linkedblockingqueue<>();

//加入到佇列中

public

boolean

add(irunnable e)

// 啟動

public

void

start(final string name) }};

t.start();

}

private disruptordisruptor;

private ringbufferringbuffer;

private runnableeventhandler runnableeventhandler = new runnableeventhandler();

private executorservice executor = executors.newcachedthreadpool(new gamethreadfactory(name));

private

final

int buffer_size = util.ceilingnextpoweroftwo(1024*64);

@override

public

boolean

add(final irunnable e)

//放到指標上,並且發布

long next = ringbuffer.next();

tryfinally

return

true;

}//直接呼叫

private

void

execute(irunnable e)

});}

public

void

start(string name)

遊戲訊息處理

事件機制在很多高階程式語言中都有支援。譬如vb c delegate c builder 並不屬於c 的範疇。c builder中的事件處理器必須用關鍵字closure 閉包 修飾 等等,甚至在html中也可以見到它的身影。事件機制的引入使軟體系統變得更加易於理解 它使一種語言 平台 更加接近於這個...

第七章 Windows 遊戲輸入訊息處理

虛擬鍵碼與鍵盤訊息 在windows中,所有鍵盤的按鍵都被定義為一組通用的 虛擬鍵碼 也就是說在windows系統下所有按鍵都會被視為虛擬鍵 包括滑鼠鍵在內 而每乙個虛擬鍵都有其對應的乙個虛擬鍵碼。windows系統是乙個訊息驅動的環境,一旦我們在鍵盤上進行輸入操作,那麼系統便會接收其對應的鍵盤訊息...

訊息和訊息處理之訊息迴圈

在win32程式設計中,訊息迴圈是相當重要的乙個概念,看似很難,但使用起來卻是非常簡單。在winmain函式的最後,有下列 while getmessage msg,null,0,0 windows應用程式可以接收以各種形式輸入的資訊,這包括鍵盤 滑鼠動作 計時器產生的訊息,也可以是其他應用程式發來...